Maison > interface Web > js tutoriel > Existe-t-il une différence fonctionnelle entre `})()` et `}());` en JavaScript ?

Existe-t-il une différence fonctionnelle entre `})()` et `}());` en JavaScript ?

Patricia Arquette
Libérer: 2024-10-31 09:18:29
original
364 Les gens l'ont consulté

Is There a Functional Difference Between `})()` and `}());` in JavaScript?

Syntaxe d'appel de fonctions en JavaScript : explorer les nuances

En JavaScript, la syntaxe d'appel de fonctions peut varier, ce qui soulève des questions sur leur fonctionnalité équivalence. Considérez les deux blocs de code suivants :

(function() {
    bar = 'bar';
    alert('foo');
})();

alert(bar);
Copier après la connexion
(function() {
    bar = 'bar';
    alert('foo');
}());

alert(bar);
Copier après la connexion

Les deux blocs de code alertent avec succès "foo" puis "bar". La seule différence notable semble être l'utilisation de })() et }()); à la fin. Alors, existe-t-il une distinction fonctionnelle entre ces deux approches ?

Fonctionnalité identique

Dans ce scénario particulier, aucune différence fonctionnelle n'existe entre les deux syntaxes. Les deux formulaires exécutent le code dans la fonction anonyme, attribuant la valeur « bar » à la variable bar et affichant les messages d'alerte comme prévu. Par conséquent, elles sont fonctionnellement équivalentes.

Quand des différences surviennent

Cependant, il existe des situations où les deux syntaxes produisent des résultats différents. Considérez les modifications suivantes :

new (function() {
    this.prop = 4;
})().prop;
Copier après la connexion
new ( function() {
    return { Class: function() { } }; 
}() ).Class;
Copier après la connexion

Dans le premier bloc de code, new est utilisé pour créer une nouvelle instance d'une classe et la propriété prop de cette instance est accessible. Cela renvoie la valeur 4.

En revanche, le deuxième bloc de code appelle new sur la propriété Class d'un objet renvoyé par une fonction. Étant donné que les parenthèses entourant l’appel de fonction se trouvent à l’intérieur des parenthèses extérieures, elles ne déclenchent pas de nouveau mais exécutent plutôt la fonction normalement. Ainsi, la propriété Class est instanciée à la place.

Conclusion

Dans la plupart des cas, })() et }()); sont interchangeables pour appeler des fonctions sans aucune implication fonctionnelle. Cependant, si new est utilisé avant les parenthèses ou si des opérations sont effectuées après les parenthèses, la syntaxe peut affecter le comportement du code. Il est crucial d'être conscient de ces nuances pour écrire du code JavaScript qui fonctionne comme prévu.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal