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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 20:24:02968parcourir

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>

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!

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