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