En JavaScript, les deux blocs de code suivants semblent produire des résultats identiques :
(function () { bar = 'bar'; alert('foo'); })(); alert(bar);
(function () { bar = 'bar'; alert('foo'); }()); alert(bar);
Les deux blocs affichent le message "foo" suivi de "bar". Cependant, existe-t-il une différence fonctionnelle entre ces deux structures de code ?
Les blocs de code sont identiques
Dans des circonstances normales, "(fonction ( ) { }) ()" et "(function () { })()" sont fonctionnellement identiques en JavaScript. Ils invoquent tous deux une fonction anonyme et l’exécutent immédiatement. La fonction initialise la variable bar et alerte le message "foo".
Cependant, lorsque une syntaxe supplémentaire est ajoutée au code, des différences peuvent apparaître.
Considérez le code suivant :
new (function () { this.prop = 4; }) ().prop;
Ce code crée une nouvelle instance de la classe de la fonction et récupère la propriété prop de la nouvelle instance. Il renvoie la valeur 4.
Considérez le code suivant :
new ( function() { return { Class: function() { } }; }() ).Class;
Ce code appelle l'opérateur new sur la propriété Class. En raison des parenthèses imbriquées, la fonction est invoquée normalement et sa valeur de retour est utilisée pour créer une nouvelle instance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!