Maison >interface Web >js tutoriel >Comment les déclarations de fonction se comportent-elles différemment dans des environnements stricts et non stricts ?
Déclarations de fonctions : une comparaison des environnements stricts et non stricts
La gestion des déclarations de fonction dans les instructions if/else a évolué au fil du temps , entraînant des comportements différents dans les navigateurs.
Mode strict ES5
En mode strict, les déclarations de fonctions dans les blocs ne sont pas autorisées. Toute tentative de déclaration d'une fonction dans une instruction if, comme indiqué dans la question, entraînera une erreur de syntaxe.
Mode non strict ES5
En mode non strict En mode strict, le comportement des déclarations de fonctions au sein des blocs était incohérent. Différents navigateurs et moteurs avaient leurs propres interprétations. Certains navigateurs, comme Chrome, permettaient à la fonction d'être déclarée et utilisée en dehors de sa portée prévue, tandis que d'autres, comme Firefox, traitaient la fonction comme étant limitée à un bloc et indisponible en dehors du bloc.
Bloc ES2015 -Fonctions étendues
Depuis l'introduction d'ECMAScript 2015 (ES2015), les déclarations de fonctions dans les blocs sont désormais explicitement étendues aux blocs. Cela signifie qu'une fonction déclarée dans une instruction if n'est accessible que dans le bloc if.
Dans l'exemple fourni, le code entraînerait une erreur de fonction non définie car la fonction a n'est déclarée que dans le cadre de if et n'est donc pas accessible dans la portée globale.
Recommandation
Pour définir conditionnellement une fonction, il est recommandé d'utiliser des expressions de fonction au lieu de déclarations de fonction. Les expressions de fonction ont une portée de bloc par défaut et peuvent être définies dans les instructions if selon les besoins sans provoquer d'effets secondaires involontaires.
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!