Maison  >  Article  >  interface Web  >  \"(function () { }) ()\" et \"(function () { })()\" sont-ils fonctionnellement égaux en JavaScript ?

\"(function () { }) ()\" et \"(function () { })()\" sont-ils fonctionnellement égaux en JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 08:53:02856parcourir

Are

"(function () { }) ()" et "(function () { })()" sont-ils fonctionnellement égaux en JavaScript ?

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 ?

Réponse

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".

Différences avec une autre syntaxe

Cependant, lorsque une syntaxe supplémentaire est ajoutée au code, des différences peuvent apparaître.

Cas 1 : Syntaxe du constructeur de fonction

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.

Cas 2 : Syntaxe de l'espace de noms

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn