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?
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".
Namun, apabila sintaks tambahan ditambahkan pada kod, perbezaan boleh muncul.
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.
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!