Déclaration et ordre d'évaluation des fonctions JavaScript
Contexte :
En JavaScript, les fonctions peuvent être déclaré ou créé à l'aide d'expressions. Les déclarations de fonctions se produisent pendant la phase de compilation, tandis que les expressions de fonction sont évaluées pendant la phase d'exécution. Comprendre cette distinction est crucial pour comprendre le comportement du code JavaScript.
La question :
Pourquoi le premier exemple du bloc de code suivant échoue-t-il, alors que les exemples restants exécuter avec succès ?
<code class="javascript">// 1 - does not work (function() { setTimeout(someFunction1, 10); var someFunction1 = function() { alert('here1'); }; })(); // ... other examples</code>
La réponse :
L'échec du premier exemple n'est pas dû à un problème de portée ou de fermeture mais plutôt à un malentendu entre les déclarations et les expressions .
Déclarations de fonction et expressions :
Phase 1 : Compilation
Pendant la compilation, le compilateur traite les déclarations de fonctions, créant des variables pour les fonctions. Dans le premier exemple, la variable someFunction1 est créée mais reste indéfinie car sa valeur (le corps de la fonction) est évaluée ultérieurement.
Phase 2 : Exécution
Exemple 1 :
Au moment de l'exécution, l'interpréteur rencontre setTimeout(someFunction1, 10) et tente de transmettre une someFunction1 non définie à setTimeout.
Exemple 2 :
En revanche, la fonction someFunction2() est une déclaration, créant la fonction lors de la compilation. Lorsque setTimeout est appelé, il reçoit la référence de fonction compilée.
Exemple 3 :
Ici, une fonction anonyme est transmise à setTimeout, ce qui crée une fermeture à la variable uneFonction3. Lorsque setTimeout se déclenche, someFunction3 s'est vu attribuer une valeur et la fonction s'exécute avec succès.
Exemple 4 :
Semblable à l'exemple 2, la fonction someFunction4 est déclarée, ce qui rend sa référence est disponible pour setTimeout.
Clarification supplémentaire :
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!