Estoy resolviendo un ejercicio que pretende usar cierres. Debe crear una función que devuelva una función que almacenará un valor y, cuando la reutilice, agregue el nuevo valor al guardado.
const firstValue = myFunction(3); const secondValue = firstValue(4); // result => 7este es el código que estoy usando para practicar los cierres:
function addNumbers(num) { let storage = 0 let n = num function adding(n) { storage += n; return storage } return adding(n) } let firstAttemp = addNumbers(4) let secondAttemp = firstAttemp(3) console.log(firstAttemp)esto arroja un error "TypeError no detectado: firstAttemp no es una función"
Como dijo @skara en su comentario, return adding(n) devuelve el resultado de llamar a adding en lugar de devolver la función para que pueda llamarse más tarde con firstAttemp(3) .
Desafortunadamente, todavía no funciona porque en realidad no asigna el valor pasado a addNumber para agregarlo más tarde.
function addNumbers(num) { let storage = 0; let n = num; function adding(n) { storage += n; return storage; } return adding; } let firstAttemp = addNumbers(4); let secondAttemp = firstAttemp(3); console.log(firstAttemp); console.log(secondAttemp); // 3! 😢 En realidad, no necesita guardar manualmente el valor de num en una variable, ya que se captura en el cierre alrededor de la adding que se devuelve.
function addNumbers(num) { function adding(n) { return num + n; return storage; } return adding; } let firstAttemp = addNumbers(4); let secondAttemp = firstAttemp(3); console.log(secondAttemp); // 7 👍🏻