Déclarations de fonctions dans les instructions if/else
Lorsque des déclarations de fonctions sont rencontrées dans des instructions if/else, leur traitement peut varier en fonction du JavaScript environnement. Dans l'extrait de code fourni, les déclarations de fonction sont définies à l'intérieur de chaque branche if/else :
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); // Expected output: foo
Sous ECMAScript 5 (ES5), en mode non strict, le code ci-dessus présente un comportement imprévisible. Différents navigateurs et moteurs gèrent différemment les déclarations de fonctions dans les blocs.
Cependant, dans ECMAScript 2015 (ES2015) et versions ultérieures, les déclarations de fonctions sont autorisées dans les blocs. Les déclarations de fonctions dans ces blocs sont limitées au bloc. Dans l'extrait de code, la fonction a est déclarée dans le bloc if le plus interne. Par conséquent, il n'est pas défini dans la portée globale, entraînant une erreur de fonction non définie :
if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); // Error: a is not defined
Pour la définition de fonction conditionnelle, il est recommandé d'utiliser des expressions de fonction au lieu de déclarations :
var a = 'foo' === 'bar' ? function() { abc = 'foo'; } : function() { abc = 19; }; a(); document.write(abc); // Expected output: 19
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!