JavaScript función de cierre valor perdido
Los valores de Cierre se pierden en una función que se pasa como un callback a otra función definida por el método new Function()
.
Código
¿Cómo se puede arreglar la función baz()
para acceder a los valores de cierre en el callback?
Nota: La función foo()
no puede modificarse.
const foo = () => {
const b = 2;
return (a) => {
return a + b; // no se puede acceder a `b` aquí
};
};
const bar = (a = 1, callback = foo()) => callback(a);
const baz = new Function(["a = 1", `callback = ${foo()}`], "return callback(a)");
console.log(bar(1)); // funciona bien e imprime 3
console.log(baz(1)); // se produce un Uncaught ReferenceError: b no está definido
davy.ai
Para corregir
baz()
y que acceda a los valores de cierre en el callback,foo()
debe ser llamado fuera del métodonew Function()
y la función resultante debe ser pasada como parámetro abaz()
. De esta manera, la función de callback puede acceder a los valores de cierre defoo()
.Aquí está el código actualizado: