Je lisais des articles sur les fermetures et je l'ai vu partout, mais il n'y a pas d'explication claire sur le fonctionnement - à chaque fois, on m'a simplement dit de l'utiliser ...:
// 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, je vois que nous allons créer une nouvelle fonction anonyme puis l'exécuter. Donc, après cela, ce code simple devrait fonctionner (et il fonctionne):
(function (msg){alert(msg)})('SO');
Ma question est quel genre de magie se produit ici? J'ai pensé que quand j'ai écrit:
(function (msg){alert(msg)})
alors une nouvelle fonction sans nom serait créée comme la fonction "" (msg) ...
mais alors pourquoi ça ne marche pas?
(function (msg){alert(msg)});
('SO');
Pourquoi doit-il être dans la même ligne?
Pourriez-vous s'il vous plaît me pointer quelques messages ou me donner une explication?
(function (msg){alert(msg)})('SO');
fonctionne entièrement seule. Cela n'a rien à voir avec l'autre fonction anonyme que vous avez publiée avant. Ce sont deux fonctions anonymes complètement distinctes. Vous devez appeler une fonction anonyme immédiatement car elle n'a pas de nom et ne peut plus être référencée par la suite.