new Function
crea una función que puede ser reutilizado. eval
simplemente ejecuta la cadena dada y devuelve el resultado de la última instrucción. Su pregunta está equivocada ya que intentó crear una función contenedora que utiliza la Función para emular una evaluación.
¿Es verdad que comparten algún código detrás de las cortinas? Sí, muy probablemente Exactamente el mismo código? No, ciertamente
Por diversión, esta es mi propia implementación imperfecta usando eval para crear una función. Espero que arroje algo de luz en 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];
// Creates the anonymous function to be returned
// The following line doesn't work in IE
// return eval('(function (' + params.join(',')+ '){' + code + '})');
// This does though
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 alcance léxico. Entonces no tendría acceso a las variables de cierre y la mía lo haría.
De hecho, esto se usa en jQuery 1.7.2 línea 573. Aunque con "algunos controles de seguridad" – PicoCreator
¿Por qué se considera 'nuevo' en esta discusión? 'Función' ejemplifica implícitamente un' objeto de función'. Excluir 'new' no cambiará el código en absoluto. Aquí hay una jsfiddle que demuestra que: http://jsfiddle.net/PcfG8/ –