Maison >interface Web >js tutoriel >Comment les déclarations de fonction se comportent-elles dans les instructions if/else en JavaScript ?

Comment les déclarations de fonction se comportent-elles dans les instructions if/else en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 01:58:03456parcourir

How Do Function Declarations Behave Within if/else Statements in JavaScript?

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!

Déclaration:
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