new Function
crée une fonction qui peut être réutilisé. eval
seulement s'exécute dans la chaîne et renvoie le résultat de la dernière instruction. Votre question est hors de propos que vous avez tenté de créer une fonction wrapper qui utilise la Fonction pour émuler un eval.
Est-il vrai qu'ils partagent un peu de code derrière les rideaux? Oui, très probablement. Exactement le même code? Non, certainement.
Pour le plaisir, voici mon propre imparfaite de la mise en œuvre à l'aide de la fonction eval pour créer une fonction. Espérons qu'il jette un peu de lumière dans la différence!
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 plus grande différence entre cela et une Fonction nouvelle, c'est que la Fonction n'est pas lexicalement étendue. Donc il n'ont pas accès à la fermeture des variables et de la mine.