Meneroka Perbezaan Antara eval() dan Function() baharu
Dalam JavaScript, eval() dan Function() kedua-duanya membenarkan pelaksanaan kod dinamik. Walau bagaimanapun, ia berbeza dengan ketara dalam mekanisme dan skop asasnya.
eval()
eval() menilai rentetan sebagai ungkapan JavaScript dalam skop pelaksanaan semasa. Ini bermakna ia mempunyai akses kepada pembolehubah tempatan dalam skop tempat ia dipanggil.
Fungsi baharu()
Fungsi baharu() menghuraikan rentetan kod JavaScript ke dalam fungsi objek. Fungsi ini kemudiannya dipanggil dan kodnya dilaksanakan dalam skop yang berasingan. Ia tidak mempunyai akses kepada pembolehubah tempatan di luar skop ini.
Perbezaan Praktikal
Pertimbangkan contoh berikut:
var evaluate = function(string) { return eval('(' + string + ')'); } var func = function(string) { return (new Function( 'return (' + string + ')' )()); } console.log(evaluate('2 + 1')); console.log(func('2 + 1'));
Kedua-duanya menilai( ) dan func() akan mengembalikan hasil ungkapan aritmetik '2 1'. Walau bagaimanapun, jika kod berikut akan dilaksanakan dalam fungsi:
var a = 11; evaluate('a = 22');
Nilai a akan ditukar kepada 22 kerana eval() menggunakan skop pelaksanaan semasa. Sebaliknya, jika func() digunakan sebaliknya, nilai a akan kekal tidak berubah kerana ia beroperasi dalam skop yang berasingan.
Pertimbangan Penggunaan
Sementara eval() dan Function() baharu boleh berguna dalam senario tertentu, ia harus digunakan dengan berhati-hati kerana risiko keselamatan dan potensi akibat yang tidak diingini. Menilai data yang tidak dipercayai boleh mendedahkan kelemahan dan kedua-dua fungsi boleh mencipta objek global yang boleh mencemarkan skop global.
Secara amnya, adalah disyorkan untuk mengelak daripada menggunakan eval() dan Function() baharu melainkan benar-benar perlu. Sebaliknya, pertimbangkan alternatif yang lebih selamat seperti fungsi tersuai atau menggunakan sintaks alternatif eval() (eval("1 1")).
Atas ialah kandungan terperinci Bila hendak menggunakan `eval()` lwn. `new Function()` dalam JavaScript: Apakah Perbezaan Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!