Rumah  >  Artikel  >  hujung hadapan web  >  Eval() lwn. Fungsi Baharu(): Adakah Mereka Benar-Benar Melakukan Perkara yang Sama?

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

Barbara Streisand
Barbara Streisandasal
2024-11-03 00:11:29334semak imbas

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'));

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
}

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!

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