Considere este código:
function set(n,v) { // This is a setter eval(n+"="+v); } let one = 1; function add1(num) { return num + one; } { let two = 2; set("add1", function(num) { return num + two; }); } // Add 1 now equals: // function(num) { // return num + two; // } // So if we call add 1: add1(); // We get a "Uncaught ReferenceError: two is not defined" Esto se debe a que eval convierte en cadena la función que elimina su conexión con las variables con las que cuenta
¿Cómo detengo esto (mantengo el comportamiento set , pero evito que la función deje variables)?
NO USE eval para variables variables. Use objetos en su lugar, como se explica aquí
Ahora, para responder a su pregunta: como una eval directa puede acceder a sus variables locales, todo lo que tiene que hacer es leerlas dentro de la cadena de eval , en lugar de pasarlas desde el exterior:
function set(n, v) { eval(n + "= v"); }