Maison > Article > interface Web > Les déclarations de fonction dans les instructions conditionnelles peuvent-elles conduire à un comportement inattendu en JavaScript ?
Déclarations de fonctions dans les instructions conditionnelles : une étude de cas
Cette question tourne autour du comportement des déclarations de fonction lorsqu'elles sont imbriquées dans des instructions if/else. Traditionnellement en JavaScript, les déclarations de fonctions étaient hissées et avaient une portée globale, quelle que soit leur position physique dans le code. En mode strict ES5, les déclarations de fonctions étaient limitées à la portée de niveau supérieur ou au sein des fonctions. Le mode non strict avait un comportement imprévisible, entraînant des incohérences entre les navigateurs.
Dans l'exemple fourni :
<code class="js">var abc = ''; if (1 === 0) { function a() { abc = 7; } } else if ('a' === 'a') { function a() { abc = 19; } } else if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); document.write(abc); //writes "foo" even though 'foo' !== 'bar'</code>
Dans JavaScript moderne (ES2015 et versions ultérieures), les déclarations de fonctions dans les blocs sont désormais autorisées. . Cependant, ils sont limités au bloc dans lequel ils sont déclarés. Cela signifie que dans l'exemple ci-dessus :
À Si vous définissez des fonctions de manière conditionnelle, il est recommandé d'utiliser des expressions de fonction plutôt que des déclarations de fonction. Cela garantit que la portée de la fonction est explicitement définie et prévisible.
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!