Czytałem kilka postów na temat zamknięć i widziałem to wszędzie, ale nie ma jasnego wyjaśnienia, jak to działa - za każdym razem, gdy kazano mi go używać ...:
// 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, widzę, że stworzymy nową anonimową funkcję, a następnie ją uruchomimy. Po tym ten prosty kod powinien działać (i działa):
(function (msg){alert(msg)})('SO');
Moje pytanie brzmi, jaka magia się tutaj dzieje? Myślałem, że kiedy napisałem:
(function (msg){alert(msg)})
wtedy utworzona zostanie nowa nienazwana funkcja, taka jak funkcja „” (msg) ...
ale dlaczego to nie działa?
(function (msg){alert(msg)});
('SO');
Dlaczego musi znajdować się w tej samej linii?
Czy możesz podać mi jakieś posty lub wyjaśnienia?
(function (msg){alert(msg)})('SO');
działa całkowicie sama. Nie ma to nic wspólnego z inną anonimową funkcją, którą wcześniej opublikowałeś. Są to dwie całkowicie odrębne anonimowe funkcje. Musisz natychmiast wywołać funkcję anonimową, ponieważ nie ma ona nazwy i nie można się do niej później odwoływać.