From 1e745971498276483410966afe55e1614a02d37a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Ezequiel=20Guill=C3=A9n?= Date: Fri, 14 Oct 2022 10:02:02 -0300 Subject: [PATCH] 03 --- .../homework/homework.js | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/FT-M1/03-JavaScriptAvanzado-II/homework/homework.js b/FT-M1/03-JavaScriptAvanzado-II/homework/homework.js index 926d201..6d5dd80 100755 --- a/FT-M1/03-JavaScriptAvanzado-II/homework/homework.js +++ b/FT-M1/03-JavaScriptAvanzado-II/homework/homework.js @@ -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 // --------------------------------