This commit is contained in:
Родитель
bde6d0e199
Коммит
1e74597149
|
@ -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
|
||||
// --------------------------------
|
||||
|
|
Загрузка…
Ссылка в новой задаче