new Function
створює функцію, яку можна використовувати повторно. eval
просто виконує заданий рядок і повертає результат останнього оператора. Ваше запитання неправильне, оскільки ви намагалися створити функцію обгортки, яка використовує функцію для емуляції 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]');
}
Найбільша різниця між цією та новою функцією полягає в тому, що функція не має лексичного масштабу. Тож він не мав би доступу до змінних закриття, а мій - мав би.