new Function
menciptakan fungsi yang dapat digunakan kembali. eval
hanya mengeksekusi string yang diberikan dan mengembalikan hasil dari pernyataan terakhir. Pertanyaan Anda keliru saat Anda mencoba membuat fungsi pembungkus yang menggunakan Fungsi untuk meniru eval.
Benarkah mereka berbagi beberapa kode di balik tirai? Ya, sangat mungkin. Kode yang persis sama? Tidak, tentu.
Untuk bersenang-senang, inilah implementasi saya yang tidak sempurna menggunakan eval untuk membuat fungsi. Semoga ini menjelaskan perbedaannya!
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]');
}
Perbedaan terbesar antara ini dan Fungsi baru adalah bahwa Fungsi tidak dicakup secara leksikal. Jadi itu tidak akan memiliki akses ke variabel penutupan dan saya akan.