Я читал некоторые посты о замыканиях и видел это повсюду, но нет четкого объяснения, как это работает - каждый раз, когда мне просто говорили использовать его ...:
// 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');
работает полностью самостоятельно. Это не имеет никакого отношения к другой анонимной функции, которую вы разместили перед ней. Это две совершенно разные анонимные функции. Вы должны немедленно вызвать анонимную функцию, потому что она не имеет имени и на нее нельзя ссылаться впоследствии.