Maison  >  Article  >  interface Web  >  Comment le comportement des déclarations de fonction dans les instructions If/Else a-t-il changé en JavaScript ?

Comment le comportement des déclarations de fonction dans les instructions If/Else a-t-il changé en JavaScript ?

DDD
DDDoriginal
2024-10-31 06:16:02257parcourir

How Has the Behavior of Function Declarations Within If/Else Statements Changed in JavaScript?

Déclarations de fonctions dans les instructions If/Else : un examen

En JavaScript, les déclarations de fonctions étaient traditionnellement traitées différemment dans les instructions if/else. Avant ES5, une fonction déclarée dans un bloc if était accessible en dehors du bloc, quel que soit l'état du bloc.

<code class="js">var abc = '';
if (1 === 0) {
  function a() {...}
} else if ('a' === 'a') {
  function a() {...}
}
a(); // Accesses the function declared inside one of the if blocks</code>

Ce comportement variait selon les navigateurs et pouvait conduire à des résultats inattendus. Pour résoudre cette incohérence, le mode strict dans ES5 a introduit une règle : les déclarations de fonction doivent être au niveau supérieur d'un script ou d'un module. Les placer dans un bloc entraînerait une erreur de syntaxe.

Cependant, avec l’avènement d’ES2015, le paysage a changé. Dans un environnement JavaScript moderne, les déclarations de fonctions dans les blocs sont désormais valides et limitées à ce bloc. Par exemple, dans le code suivant :

<code class="js">var abc = '';
if (1 === 0) {
  function a() {...}
} else if ('a' === 'a') {
  function a() {...}
}
a(); // Undefined function error</code>

La fonction a est déclarée dans le cadre de l'instruction if, elle n'est donc pas accessible en dehors de celle-ci.

Par conséquent, si vous avez besoin de Si vous définissez une fonction de manière conditionnelle, il est recommandé d'utiliser des expressions de fonction plutôt que des déclarations. Les expressions de fonction peuvent être définies n'importe où dans le code et peuvent capturer les valeurs des variables dans la portée actuelle.

<code class="js">var abc = '';
if (1 === 0) {
  var a = function () {...};
} else if ('a' === 'a') {
  var a = function () {...};
}
a();</code>

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