Maison > interface Web > js tutoriel > le corps du texte

Comment JavaScript autorise-t-il l'utilisation des fonctions avant la définition ? Le mystère du levage expliqué.

Mary-Kate Olsen
Libérer: 2024-10-28 20:24:02
original
888 Les gens l'ont consulté

How Does JavaScript Allow Function Use Before Definition? The Mystery of Hoisting Explained.

Déclarations de fonctions vs expressions : percer le mystère de l'accès anticipé aux fonctions en JavaScript

Malgré son apparence intuitive, la possibilité d'utiliser une fonction avant que sa définition en JavaScript ait longtemps déconcerté les développeurs. Considérez le code suivant :

<code class="javascript">function fooCheck() {
  alert(internalFoo()); // Using internalFoo() before its definition

  return internalFoo(); // Still using it, despite its undefined status

  function internalFoo() { return true; } // Finally, the definition arrives
}

fooCheck();</code>
Copier après la connexion

Curieusement, ce code s'exécute sans erreur dans tous les principaux navigateurs. Pour résoudre cette énigme, nous nous tournons vers le concept de déclarations et d'expressions de fonctions.

Déclarations de fonctions : le secret de Hoisting

La ключевое слово "fonction" en JavaScript crée une fonction déclaration. Contrairement aux expressions de fonction, qui sont des affectations, les déclarations de fonction présentent une caractéristique unique : le levage.

Le levage est une astuce syntaxique qui élève l'identifiant de la fonction au-dessus de toutes les autres instructions dans sa portée, lui permettant d'être référencé avant même son attribution réelle. définition. Dans notre exemple, l'identifiant « internalFoo » est hissé, ce qui le rend disponible pour une utilisation à tout moment dans la fonction « fooCheck ».

Accès anticipé aux fonctions : une conséquence du levage

L'accès anticipé à "internalFoo" est le résultat direct du levage. L'interpréteur rencontre la déclaration de fonction et attribue à l'identifiant "internalFoo" un espace réservé, permettant de le référencer ultérieurement. Ce n'est que lorsque l'interpréteur atteint le corps de la fonction qu'il exécute la définition, créant ainsi la fonction réelle.

Expressions de fonction : différentes règles s'appliquent

Contrairement aux déclarations de fonction, la fonction les expressions suivent une exécution descendante normale. Ils sont évalués lorsqu'ils sont rencontrés, et leurs identifiants ne sont pas relevés. Cela signifie que les tentatives d'accès à une expression de fonction avant qu'elle ne soit définie entraîneront une erreur.

Clarification dans la norme ECMAScript

Le comportement des déclarations de fonction est explicitement défini dans la norme ECMAScript (section 10.1.3). Il indique que les déclarations de fonction sont liées avant que le contenu de leur bloc de code ne soit exécuté, quelle que soit la position de la fonction dans le code.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!