Je suis d'étudier le comportement des expressions de fonction immédiatement invoquées (IIFE) et tout en faisant que j'ai rencontré la situation suivante.
(function () { document.write("bar"); }) var x = 1; (function () { document.write("foo"); }());
3 Réponses :
Parce que vous avez oublié le point-virgule après la première expression de fonction: sinon le deuxième "opérateur de regroupement" est interprété comme un appel de la fonction. Donc, ceci: p> est fondamentalement identique à celui de: p> la réorganisation est un peu plus facile à voir. N'oubliez pas que les caractères d'espace blanc n'ont aucune signification en JavaScript et sont ignorés. P> p>
Comme Felix Kling a correctement noté: le point-virgule manquant provoque l'interprétation des parenthèses autour des parenthèses autour de la seconde que l'appel de fonction soit plutôt que de regrouper l'expression de la fonction. Il devient beaucoup plus clair sans les nouvelles lignes: ou avec un certain réalignement: p> La première expression de fonction est appelée à la suite de la deuxième expression de fonction comme son premier et unique argument. Vous devriez également noter que foobar code> est écrit plutôt que
Barfoo code>, car la deuxième fonction est appelée en premier et son résultat est transmis comme un argument à la première fonction. P> p>
Vous pouvez écrire un ife aussi comme celui-ci: En omettant le point-virgule, votre premier codeNippet appelle en réalité la première fonction avec la deuxième fonction de la livraison en tant que paramètre pour le premier. p> quel premier impression (fonction () {}) () code>
foo code> puis
bar code> Contrairement à: p>
(function () {
document.write("bar");
});
(function () {
document.write("foo");
}());
Conseil: Utilisez JSHINT.COM