new Function
crée une fonction qui peut être réutilisée. eval
exécute simplement la chaîne donnée et renvoie le résultat de la dernière instruction. Votre question est erronée lorsque vous avez tenté de créer une fonction wrapper qui utilise Function pour émuler une évaluation.
Est-il vrai qu'ils partagent du code derrière les rideaux? Oui, très probablement. Exactement le même code? Non, certainement.
Pour le plaisir, voici ma propre implémentation imparfaite utilisant eval pour créer une fonction. J'espère que cela éclairera 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 cette fonction et la nouvelle fonction est que la fonction n'est pas de portée lexicale. Il n'aurait donc pas accès aux variables de fermeture et la mienne le ferait.