es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para corregir baz() y que acceda a los valores de cierre en el callback, foo() debe ser llamado fuera del método new Function() y la función resultante debe ser pasada como parámetro a baz(). De esta manera, la función de callback puede acceder a los valores de cierre de foo().

    Aquí está el código actualizado:

    const foo = () => {
      const b = 2;
    
      return (a) => {
        return a + b; // puede acceder a `b` aquí
      };
    };
    
    const bar = (a = 1, callback = foo()) => callback(a);
    
    const callback = foo(); // llama a foo() fuera de new Function()
    const baz = new Function(["a = 1", "callback"], "return callback(a)"); // pasa callback como parámetro
    
    console.log(bar(1)); // funciona correctamente e imprime 3
    console.log(baz(1, callback)); // debería funcionar correctamente ahora e imprimir 3
    

Comments are closed.