Stavo leggendo alcuni post sulle chiusure e l'ho visto ovunque, ma non c'è una spiegazione chiara su come funzioni - ogni volta che mi è stato appena detto di usarlo ...:
// 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, vedo che creeremo una nuova funzione anonima e la eseguiremo. Quindi dopo questo semplice codice dovrebbe funzionare (e funziona):
(function (msg){alert(msg)})('SO');
La mia domanda è: che tipo di magia accade qui? Ho pensato che quando ho scritto:
(function (msg){alert(msg)})
quindi una nuova funzione senza nome verrebbe creata come la funzione "" (msg) ...
ma allora perché non funziona?
(function (msg){alert(msg)});
('SO');
Perché deve essere nella stessa linea?
Potresti indicarmi alcuni post o darmi una spiegazione?
(function (msg){alert(msg)})('SO');
funziona completamente da sola. Non ha nulla a che fare con l'altra funzione anonima che hai pubblicato prima. Queste sono due funzioni anonime completamente separate. Devi invocare immediatamente una funzione anonima perché non ha nome e non può essere referenziata in seguito.