new Function
crea una funzione che può essere riutilizzato. eval
esegue semplicemente la stringa data e restituisce il risultato dell'ultima istruzione. La tua domanda è fuorviante mentre tentavi di creare una funzione wrapper che utilizza Function per emulare un'eval.
È vero che condividono qualche codice dietro le tende? Sì, molto probabilmente. Esattamente lo stesso codice? No, certamente.
Per divertimento, ecco la mia implementazione imperfetta utilizzando eval per creare una funzione. Spero che faccia luce nella differenza!
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 più grande differenza tra questa e la nuova funzione è che la funzione non è in ambito lessicale. Quindi non avrebbe accesso alle variabili di chiusura e il mio lo farebbe.
fonte
2011-01-05 00:53:01
In realtà questo viene utilizzato in jQuery 1.7.2 riga 573. Anche se con "alcuni controlli di sicurezza" – PicoCreator
Perché in questa discussione viene considerato 'nuovo'? 'Function' istanzia implicitamente un' oggetto funzione'. Escludendo 'new' non cambierà affatto il codice. Ecco un jsfiddle che lo dimostra: http://jsfiddle.net/PcfG8/ –