Sintaks Fungsi Tanpa Nama Terkapsul
Dalam JavaScript, fungsi tanpa nama terkapsul dicipta dengan membungkus fungsi dalam kurungan dan melaksanakannya dengan segera:
(function(){ // code here })();
Sintaks ini digunakan untuk mengelakkan kekacauan skop global dengan pembolehubah dan fungsi.
Mengapa Ini Berfungsi: (function(){})();
Apabila tanda kurung mengelilingi pengisytiharan fungsi, hasilnya ialah dinilai sebagai ungkapan fungsi. Ungkapan fungsi membenarkan nama pilihan, jadi ungkapan ini boleh dijalankan tanpa nama.
Mengapa Ini Tidak Berfungsi: function(){}();
Hidup sebaliknya, apabila tiada kurungan, JavaScript menghuraikannya sebagai pengisytiharan fungsi. Pengisytiharan fungsi memerlukan pengecam nama, yang tiada dalam kes ini.
Pengisytiharan Fungsi lwn. Ungkapan
Ungkapan fungsi boleh dinamakan atau tidak dinamakan, manakala pengisytiharan fungsi mesti mempunyai nama.
Kurungan dan Konteks
Kurungan menunjukkan bahawa kod yang disertakan adalah ungkapan. Sama ada ia pengisytiharan fungsi atau ungkapan bergantung pada konteks. Pengisytiharan fungsi boleh muncul dalam skop global atau dalam badan fungsi lain, manakala ungkapan fungsi hanya boleh muncul dalam ungkapan.
Kekaburan Contoh
0, function foo() {} // Function Expression function foo() {} // Function Declaration
Dalam contoh ini , penghurai menentukan sama ada ia pengisytiharan fungsi atau ungkapan berdasarkan konteks. Ungkapan boleh muncul dalam ungkapan, manakala pengisytiharan hanya boleh muncul di lokasi tertentu.
Mengapa Fungsi dalam Blok Perlu Dielakkan
Fungsi di dalam blok boleh membawa kepada tingkah laku yang tidak dijangka disebabkan isu skop berubah-ubah. Contohnya:
if (true) { function foo() { alert('true'); } } else { function foo() { alert('false!'); } } foo(); // true? false? why?
Atas ialah kandungan terperinci Mengapa Tanda Kurung Mencipta Fungsi Tanpa Nama Terkapsul dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!