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

Pourquoi mon code JavaScript échoue-t-il lors de l'utilisation de « setTimeout » avec des expressions de fonction ?

Linda Hamilton
Libérer: 2024-10-24 18:50:41
original
889 Les gens l'ont consulté

Why Does My JavaScript Code Fail When Using `setTimeout` With Function Expressions?

Déclaration de fonction JavaScript et ordre d'évaluation

Pourquoi le premier exemple échoue-t-il ?

En JavaScript, l'exécution du code implique deux phases : la compilation et l'évaluation. Le premier exemple échoue en raison d'un malentendu fondamental entre les déclarations de fonction et les expressions concernant ces phases.

Déclarations de fonction vs expressions

Déclarations de fonction utilisez le mot-clé function et suivez le syntaxe :

function name (arguments) {code}
Copier après la connexion

Les expressions de fonction, en revanche, sont écrites dans un contexte d'expression et suivent la même syntaxe que les déclarations, sauf qu'elles sont placées entre parenthèses. Les expressions sont traitées lors de l'exécution, pas de la compilation.

Analyse de cas

Exemple 1 :

(function() {
setTimeout(someFunction1, 10);
var someFunction1 = function() { alert('here1'); };
})();
Copier après la connexion

Compilation : SomeFunction1 est défini comme indéfini.

Exécution : setTimeout est appelé avec la valeur indéfinie de someFunction1.

Exemple 2 :

(function() {
setTimeout(someFunction2, 10);
function someFunction2() { alert('here2'); }
})();
Copier après la connexion

Compilation : SomeFunction2 est déclarée comme une fonction..

Exécution : setTimeout est appelé avec la fonction someFunction2 compilée.

Exemple 3 :

(function() {
setTimeout(function() { someFunction3(); }, 10);
var someFunction3 = function() { alert('here3'); };
})();
Copier après la connexion

Compilation : SomeFunction3 est initialement définie comme non définie.

Exécution : Une fonction anonyme est passée à setTimeout, créant une fermeture à someFunction3. Plus tard, someFunction3 se voit attribuer une fonction, qui remplace sa valeur non définie.

Exemple 4 :

(function() {
setTimeout(function() { someFunction4(); }, 10);
function someFunction4() { alert('here4'); }
})();
Copier après la connexion

Semblable à l'exemple 2, someFunction4 est déclarée avant d'être transmise à setTimeout.

Résumé

Le premier exemple échoue car someFunction1 n'est pas déclaré avant d'être transmis à setTimeout lors de la compilation. Les expressions de fonction doivent être évaluées lors de l'exécution, une fois les déclarations traitées. Par conséquent, l'ordre des expressions est crucial lors de l'utilisation d'expressions de fonction, en particulier lorsqu'elles sont transmises à des fonctions asynchrones comme setTimeout.

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!