Eu estava lendo alguns posts sobre fechamentos e vi isso em todos os lugares, mas não há uma explicação clara de como funciona - sempre que me disseram para usá-lo ...:
// 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, vejo que vamos criar uma nova função anônima e depois executá-la. Então, depois disso, esse código simples deve funcionar (e funciona):
(function (msg){alert(msg)})('SO');
Minha pergunta é que tipo de mágica acontece aqui? Eu pensei que quando escrevi:
(function (msg){alert(msg)})
então uma nova função sem nome seria criada como a função "" (msg) ...
mas então por que isso não funciona?
(function (msg){alert(msg)});
('SO');
Por que ele precisa estar na mesma linha?
Você poderia me indicar algumas postagens ou me dar uma explicação?
(function (msg){alert(msg)})('SO');
funciona completamente por conta própria. Não tem nada a ver com a outra função anônima que você postou antes dela. Essas são duas funções anônimas completamente separadas. Você precisa invocar uma função anônima imediatamente porque ela não tem nome e não pode ser referenciada posteriormente.