Eval() lwn. Fungsi Baharu(): Adakah Mereka Benar-Benar Melakukan Perkara yang Sama?

Barbara Streisand
Lepaskan: 2024-11-03 00:11:29
asal
349 orang telah melayarinya

Eval() vs. New Function(): Do They Really Do the Same Thing?

Meneroka Perbezaan Antara eval() dan new Function()

Dalam JavaScript, eval() dan new Function() sering dibandingkan untuk memahami persamaan dan perbezaan mereka. Artikel ini mengkaji sama ada mereka melakukan tugas yang sama dan memberikan penjelasan terperinci tentang kelakuan mereka yang berbeza.

Contoh Kod

Pertimbangkan coretan 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'));
Salin selepas log masuk

Dalam kod ini, evaluate() menggunakan eval() untuk menilai rentetan sebagai ungkapan JavaScript, manakala func() menggunakan pembina Function() baharu untuk mencipta objek fungsi daripada rentetan dan segera melaksanakannya.

Fungsi Berbeza

Walaupun kedua-dua fungsi menilai rentetan, mereka tidak melaksanakan tugas yang sama. Berikut ialah perbezaan utama:

  • eval():

    • Menilai rentetan sebagai ungkapan JavaScript dalam skop semasa.
    • Mempunyai akses kepada pembolehubah setempat yang ditakrifkan dalam blok kod sekeliling.
  • Fungsi baharu():

    • Menghuraikan rentetan menjadi objek fungsi.
    • Melaksanakan fungsi dalam skop yang berasingan, mengasingkannya daripada pembolehubah tempatan kod sekeliling.

Contoh untuk Menyerlahkan Perbezaan

Pertimbangkan kod berikut:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}
Salin selepas log masuk

Jika Fungsi baharu('return (a = 22);')() digunakan dan bukannya eval (), pembolehubah tempatan a akan mengekalkan nilai asalnya kerana Function() baharu tidak mengakses pembolehubah tempatan daripada skop sekeliling.

Syor dan Pertimbangan Keselamatan

Sesetengah Pembangun JavaScript, seperti Douglas Crockford, menyokong agar tidak menggunakan eval() dan Function() baharu melainkan benar-benar perlu. Pengesyoran ini berpunca daripada kebimbangan keselamatan, kerana menilai data yang tidak dipercayai dengan mana-mana fungsi boleh berisiko.

Oleh itu, secara amnya adalah dinasihatkan untuk meneroka kaedah alternatif untuk menilai dan melaksanakan kod JavaScript sebelum menggunakan eval() atau Fungsi baharu( ).

Atas ialah kandungan terperinci Eval() lwn. Fungsi Baharu(): Adakah Mereka Benar-Benar Melakukan Perkara yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan