This commit is contained in:
Diego Ezequiel Guillén 2022-10-14 10:02:02 -03:00
Родитель bde6d0e199
Коммит 1e74597149
1 изменённых файлов: 33 добавлений и 11 удалений

Просмотреть файл

@ -13,7 +13,12 @@ nuevoContador() // 2
const otroContador = counter()
otroContador() // 1
otroContador() // 2 */
function counter() {}
function counter() {
var numero = 1;
return function() {
return numero++;
}
}
/* Ejercicio 2
Tu tarea aquí es lograr, mediante un closure, que cacheFunction actúe como una memoria caché para el callback
@ -21,7 +26,11 @@ que recibe por parámetro (cb); es decir, que "recuerde" el resultado de cada op
al realizar una operación por segunda vez, se pueda obtener el resultado de esa "memoria" sin tener que efectuar
otra vez cálculos que ya se hicieron anteriormente.
- cacheFunction debe retornar una función. Esta función debe aceptar un argumento (arg) e invocar a cb con ese argumento; hecho eso, debe guardar el argumento junto con el resultado de la invocación (tip: usá un objeto donde cada propiedad sea el argumento, y su valor el resultado de la correspondiente invocación a cb) de manera que, la próxima vez que reciba el mismo argumento, no sea necesario volver a invocar a cb, porque el resultado estará guardado en la "memoria caché".
- cacheFunction debe retornar una función. Esta función debe aceptar un argumento (arg) e invocar a cb con
ese argumento; hecho eso, debe guardar el argumento junto con el resultado de la invocación
(tip: usá un objeto donde cada propiedad sea el argumento, y su valor el resultado de la correspondiente
invocación a cb) de manera que, la próxima vez que reciba el mismo argumento, no sea necesario volver a
invocar a cb, porque el resultado estará guardado en la "memoria caché".
Ejemplo:
function square(n){
@ -31,9 +40,16 @@ otra vez cálculos que ya se hicieron anteriormente.
const squareCache = cacheFunction(square)
squareCache(5) // invocará a square(5), almacenará el resultado y lo retornará
squareCache(5) // no volverá a invocar a square, simplemente buscará en la caché cuál es el resultado de square(5) y lo retornará (tip: si usaste un objeto, podés usar hasOwnProperty) */
squareCache(5) // no volverá a invocar a square, simplemente buscará en la caché cuál es el resultado
de square(5) y lo retornará (tip: si usaste un objeto, podés usar hasOwnProperty) */
function cacheFunction(cb) {}
function cacheFunction(cb) {
var o = new Object();
return function (arg) {
if (!o.hasOwnProperty(arg)) o[arg] = cb(arg);
return o[arg];
}
}
//----------------------------------------
@ -56,20 +72,26 @@ function getNombre() {}
IMPORTANTE: no modificar el código de arriba (variables instructor y alumno, y función getNombre)
Usando el método bind() guardar, en las dos variables declaradas a continuación, dos funciones que actúen como getNombre pero retornen el nombre del instructor y del alumno, respectivamente.
*/
let getNombreInstructor = getNombre.bind();
let getNombreAlumno = getNombre.bind();
getNombre = function () { return this.nombre }
let getNombreInstructor = getNombre.bind(instructor);
let getNombreAlumno = getNombre.bind(alumno);
/*
Ejercicio 4
Sin modificar la función crearCadena, usar bind para guardar, en las tres variables declaradas a continuación, tres funciones que retornen una cadena (string) y el delimitador especificado (asteriscos, guiones, y guiones bajos, respectivamente). Las funciones obtenidas deberían recibir solamente un argumento - la cadena de texto - ya que los otros argumentos habrán sido "bindeados".
Sin modificar la función crearCadena, usar bind para guardar, en las tres variables declaradas a
continuación, tres funciones que retornen una cadena (string) y el delimitador especificado
(asteriscos, guiones, y guiones bajos, respectivamente). Las funciones obtenidas deberían recibir
solamente un argumento - la cadena de texto - ya que los otros argumentos habrán sido "bindeados".
*/
function crearCadena(delimitadorIzquierda, delimitadorDerecha, cadena) {}
let textoAsteriscos = crearCadena.bind();
let textoGuiones = crearCadena.bind();
let textoUnderscore = crearCadena.bind();
crearCadena = function(izq, der, cad) {
return izq + cad + der
};
let textoAsteriscos = crearCadena.bind(this,"*","*");
let textoGuiones = crearCadena.bind(this,"-","-");
let textoUnderscore = crearCadena.bind(this,"_","_");
// No modifiquen nada debajo de esta linea
// --------------------------------