Я читав кілька публікацій про закриття і бачив це скрізь, але немає чіткого пояснення, як це працює - кожен раз, коли мені просто казали використовувати його ...:
// 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
})();
Добре, я бачу, що ми створимо нову анонімну функцію, а потім виконаємо її. Отже після цього цей простий код повинен працювати (і він робить):
(function (msg){alert(msg)})('SO');
Моє запитання - яка магія відбувається тут? Я думав, що коли писав:
(function (msg){alert(msg)})
тоді буде створена нова неназвана функція, як функція "" (msg) ...
але тоді чому це не працює?
(function (msg){alert(msg)});
('SO');
Чому потрібно бути в одному рядку?
Чи можете ви, будь ласка, вкажіть мені кілька дописів чи поясніть мені?
(function (msg){alert(msg)})('SO');
працює повністю самостійно. Це не має нічого спільного з іншою анонімною функцією, яку ви розмістили перед нею. Це дві абсолютно окремі анонімні функції. Вам потрібно негайно викликати анонімну функцію, оскільки вона не має імені і після цього не може бути посилається.