La spécification ES6 introduit des fonctions au niveau des blocs, permettant des déclarations de fonctions dans les blocs. Comprendre leur sémantique est essentiel pour une programmation efficace.
Setting | Visible Outside Block | Hoisted | Hoisting Scope | Temporal Dead Zone |
---|---|---|---|---|
Non-strict, No Web Extensions | No | No | N/A | N/A |
Strict, No Web Extensions | No | Yes | Block Level | Yes |
Non-strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
Strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
Le « mode strict » dans ce contexte fait référence à la rigueur de la fonction ou du script dans lequel le bloc contenant la déclaration de fonction apparaît, et non à la fonction elle-même. Les "extensions Web" s'appliquent uniquement au code bâclé (non strict) avec une apparence de fonction "saine" (pas de collision de noms).
Dans ES6 pur (sans "extensions Web"), les déclarations de fonction dans les blocs ont une sémantique cohérente quelle que soit la rigueur. Ils sont hissés en haut du bloc et se comportent comme des déclarations de fonction normales.
Avec les « extensions Web », le mode bâclé introduit une sémantique supplémentaire. Une déclaration de fonction dans un bloc est hissée en haut de la fonction englobante en tant que déclaration var, et l'objet fonction est affecté à cette variable lorsque la déclaration de fonction est évaluée.
Il en résulte deux liaisons pour le même identifiant : un de portée fonction (visible à l'extérieur du bloc) et un de portée bloc (visible uniquement à l'intérieur du bloc). La liaison de portée fonction est initialisée avec undefined jusqu'à ce que la fonction soit déclarée, auquel cas l'objet de fonction lui est attribué.
Avant que la déclaration de fonction ne soit rencontrée dans l'exécution du bloc, la liaison de portée fonction est indéfinie et accède cela lancera une exception.
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!