new Function
создает функцию, которую можно использовать повторно. eval
просто выполняет заданную строку и возвращает результат последнего оператора. Ваш вопрос ошибочен, поскольку вы пытались создать функцию-оболочку, которая использует Function для имитации eval.
Правда ли, что они разделяют какой-то код за кулисами? Да, очень вероятно. Точно такой же код? Нет, конечно.
Ради интереса, вот моя собственная несовершенная реализация с использованием eval для создания функции. Надеюсь, это проливает свет на разницу!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
Самая большая разница между этой функцией и новой функцией заключается в том, что функция не имеет лексической области видимости. Так что у него не было бы доступа к закрывающим переменным, как у меня.