Membezakan eval() dan Function() baharu dalam JavaScript
Dalam JavaScript, pembangun sering menghadapi dua fungsi yang kelihatan melakukan tugas yang serupa : eval() dan Fungsi baharu(). Walaupun kedua-dua fungsi menilai rentetan sebagai kod, mekanisme dan implikasi asasnya berbeza dengan ketara.
eval() vs new Function()
Fungsi eval() menilai a rentetan sebagai ungkapan JavaScript dalam skop pelaksanaan semasa. Ini bermakna ia mempunyai akses kepada pembolehubah tempatan yang ditakrifkan dalam skop semasa. Sebaliknya, Function() baru menghuraikan kod JavaScript yang disimpan dalam rentetan ke dalam objek fungsi, yang kemudiannya boleh dipanggil. Objek fungsi ini dicipta dalam skop yang berasingan, dan oleh itu tidak boleh mengakses pembolehubah tempatan persekitaran panggilan.
Contoh
Untuk menggambarkan perbezaan ini, pertimbangkan kod 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-dua fungsi akan mengeluarkan hasil yang dijangkakan sebanyak 3. Walau bagaimanapun, jika kita mengubah suai kod untuk menggunakan pembolehubah tempatan, perbezaannya menjadi jelas:
function test1() { var a = 11; eval('(a = 22)'); // Modifies the local variable within the `test1` function alert(a); // Alerts 22 }
Dalam kes ini, menggunakan eval() akan mengubah suai pembolehubah tempatan a kerana penilaian berlaku dalam skop fungsi test1. Walau bagaimanapun, jika kita menggunakan Function('return (a = 22);')() baharu, pembolehubah tempatan a akan kekal tidak terjejas kerana kod berjalan dalam skop yang berasingan.
Keselamatan dan Pertimbangan
Adalah penting untuk ambil perhatian bahawa eval() dan Function() baharu boleh menimbulkan risiko keselamatan apabila digunakan dengan data yang tidak dipercayai. Input hasad berpotensi mendedahkan maklumat sensitif atau melaksanakan kod sewenang-wenangnya. Oleh itu, adalah amat disyorkan untuk mengelak daripada menggunakan fungsi ini melainkan benar-benar perlu.
Kesimpulan
Ringkasnya, eval() dan Function() baharu beroperasi secara berbeza dalam JavaScript. eval() menilai rentetan dalam skop pelaksanaan semasa, manakala Function() baharu mencipta skop baharu untuk penilaian. Memahami perbezaan ini adalah penting untuk pengaturcaraan JavaScript yang berkesan dan mengekalkan keselamatan.
Atas ialah kandungan terperinci Bila hendak menggunakan `eval()` vs `new Function()` dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!