Estaba leyendo algunas publicaciones sobre cierres y vi esto en todas partes, pero no hay una explicación clara de cómo funciona, cada vez que me dijeron que lo usara ...:
// 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, veo que crearemos una nueva función anónima y luego la ejecutaremos. Entonces, después de eso, este código simple debería funcionar (y lo hace):
(function (msg){alert(msg)})('SO');
Mi pregunta es ¿qué tipo de magia sucede aquí? Pensé que cuando escribí:
(function (msg){alert(msg)})
entonces se crearía una nueva función sin nombre como la función "" (msg) ...
pero entonces ¿por qué esto no funciona?
(function (msg){alert(msg)});
('SO');
¿Por qué necesita estar en la misma línea?
¿Podrías señalarme algunas publicaciones o darme una explicación?
(function (msg){alert(msg)})('SO');
funciona completamente por sí sola. No tiene nada que ver con la otra función anónima que publicó antes. Esas son dos funciones anónimas completamente separadas. Debe invocar una función anónima de inmediato porque no tiene nombre y no se puede hacer referencia después.