Saya membaca beberapa posting tentang penutupan dan melihat ini di mana-mana, tetapi tidak ada penjelasan yang jelas tentang cara kerjanya - setiap kali saya hanya diminta untuk menggunakannya ...:
// Create a new anonymous function, to use as a wrapper
(function(){
// The variable that would, normally, be global
var msg = "Thanks for visiting!";
// Binding a new function to a global object
window.onunload = function(){
// Which uses the 'hidden' variable
alert( msg );
};
// Close off the anonymous function and execute it
})();
Ok saya melihat bahwa kita akan membuat fungsi anonim baru dan kemudian menjalankannya. Jadi setelah itu kode sederhana ini akan berfungsi (dan itu memang):
(function (msg){alert(msg)})('SO');
Pertanyaan saya adalah sihir apa yang terjadi di sini? Saya berpikir ketika saya menulis:
(function (msg){alert(msg)})
maka fungsi tanpa nama baru akan dibuat seperti fungsi "" (msg) ...
tapi mengapa ini tidak berhasil?
(function (msg){alert(msg)});
('SO');
Mengapa harus di baris yang sama?
Bisakah Anda menunjukkan saya beberapa posting atau memberi saya penjelasan?
(function (msg){alert(msg)})('SO');
bekerja sepenuhnya dengan sendirinya. Ini tidak ada hubungannya dengan fungsi anonim lain yang Anda poskan sebelumnya. Mereka adalah dua fungsi anonim yang sepenuhnya terpisah. Anda harus segera menjalankan fungsi anonim karena tidak memiliki nama dan tidak dapat direferensikan setelahnya.