new Function
crea una función que se puede reutilizar. eval
simplemente ejecuta la cadena dada y devuelve el resultado de la última declaración. Su pregunta está equivocada cuando intentó crear una función contenedora que usa Function para emular una evaluación.
¿Es cierto que comparten algún código detrás de las cortinas? Sí, muy probablemente. ¿Exactamente el mismo código? Claro que no.
Por diversión, aquí está mi propia implementación imperfecta usando eval para crear una función. ¡Espero que arroje algo de luz sobre la diferencia!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
La mayor diferencia entre esta y la nueva función es que la función no tiene un ámbito léxico. Entonces no tendría acceso a las variables de cierre y la mía sí.