Rumah  >  Artikel  >  hujung hadapan web  >  Bila hendak menggunakan `eval()` lwn. `new Function()` dalam JavaScript: Apakah Perbezaan Utama?

Bila hendak menggunakan `eval()` lwn. `new Function()` dalam JavaScript: Apakah Perbezaan Utama?

DDD
DDDasal
2024-11-02 03:16:30496semak imbas

When to Use `eval()` vs. `new Function()` in JavaScript: What Are the Key Differences?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn