Rumah  >  Artikel  >  hujung hadapan web  >  Adakah \"(fungsi () { }) ()\" dan \"(fungsi () { })()\" Secara Fungsinya Sama dalam JavaScript?

Adakah \"(fungsi () { }) ()\" dan \"(fungsi () { })()\" Secara Fungsinya Sama dalam JavaScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 08:53:02854semak imbas

Are

Adakah "(function () { }) ()" dan "(function () { })()" Secara Fungsinya Sama dalam JavaScript?

Dalam JavaScript, dua blok kod berikut kelihatan menghasilkan hasil yang sama:

(function () {
    bar = 'bar';
    alert('foo');
})();

alert(bar);
(function () {
    bar = 'bar';
    alert('foo');
}());

alert(bar);

Kedua-dua blok memaparkan mesej "foo" diikuti dengan "bar". Walau bagaimanapun, adakah terdapat perbezaan fungsi antara kedua-dua struktur kod ini?

Jawapan

Blok Kod Adalah Sama

Dalam keadaan biasa, "(function ( ) { }) ()" dan "(function () { })()" secara fungsinya sama dalam JavaScript. Kedua-duanya menggunakan fungsi tanpa nama dan segera melaksanakannya. Fungsi ini memulakan pembolehubah bar dan memaklumkan mesej "foo".

Perbezaan dengan Sintaks Lain

Namun, apabila sintaks tambahan ditambahkan pada kod, perbezaan boleh muncul.

Kes 1: Sintaks Pembina Fungsi

Pertimbangkan kod berikut:

new (function () {
    this.prop = 4;
}) ().prop;

Kod ini mencipta tika baharu kelas fungsi dan mendapatkan semula sifat prop bagi tika baharu. Ia mengembalikan nilai 4.

Kes 2: Sintaks Ruang Nama

Pertimbangkan kod berikut:

new ( function() {
    return { Class: function() { } }; 
}() ).Class;

Kod ini memanggil operator baharu pada sifat Kelas. Disebabkan kurungan bersarang, fungsi ini digunakan secara normal dan nilai pulangannya digunakan untuk mencipta tika baharu.

Atas ialah kandungan terperinci Adakah \"(fungsi () { }) ()\" dan \"(fungsi () { })()\" Secara Fungsinya Sama dalam JavaScript?. 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