Maison > interface Web > js tutoriel > Comment les fonctions au niveau des blocs ES6 se comportent-elles en modes strict et non strict, avec et sans extensions Web ?

Comment les fonctions au niveau des blocs ES6 se comportent-elles en modes strict et non strict, avec et sans extensions Web ?

DDD
Libérer: 2024-12-17 01:39:26
original
434 Les gens l'ont consulté

How Do ES6 Block-Level Functions Behave in Strict and Non-Strict Modes, with and without Web Extensions?

Fonctions au niveau des blocs dans ES6 : précision sémantique

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.

Comportements des fonctions au niveau des blocs

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

Mode strict et fonctions au niveau des blocs

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.

Sémantique de compatibilité Web

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal