new Function
cria uma função que pode ser reutilizada. eval
apenas executa a string fornecida e retorna o resultado da última instrução. Sua pergunta está equivocada, pois você tentou criar uma função de wrapper que usa Function para emular um eval.
É verdade que eles compartilham algum código por trás das cortinas? Sim, muito provavelmente. Exatamente o mesmo código? Certamente.
Por diversão, aqui está minha própria implementação imperfeita usando eval para criar uma função. Espero que esclareça a diferença!
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]');
}
A maior diferença entre esta e a nova Função é que Function não tem escopo léxico. Portanto, ele não teria acesso às variáveis de fechamento e o meu teria.