Quelle est la portée des variables en JavaScript ?
P粉696891871
2023-08-21 15:35:39
<p>Quelle est la portée des variables en JavaScript ? Ont-ils la même portée à l’intérieur et à l’extérieur de la fonction ? Ou est-ce important ? De plus, si les variables sont définies globalement, où sont-elles stockées ? </p>
Javascript utilise des chaînes de portée pour déterminer la portée d'une fonction donnée. Il existe généralement une portée globale et chaque fonction définie a sa propre portée imbriquée. Toute fonction définie dans une autre fonction a une portée locale liée à la fonction externe. Il s'agit toujours de l'emplacement du code source où la portée est définie.
Un élément dans une chaîne de portées est essentiellement une carte avec un pointeur vers sa portée parent.
Lors de l'analyse des variables, JavaScript part de la portée la plus interne et recherche vers l'extérieur.
TLDR
JavaScript a une portée et des fermetures lexicales (également appelées statiques). Cela signifie que vous pouvez déterminer la portée d'un identifiant en examinant le code source.
Les quatre périmètres sont les suivants :
Sauf les cas particuliers de portée globale et de module, les variables sont déclarées en utilisant
var
(函数作用域)、let
(块作用域)和const
(portée de bloc). En mode strict, la plupart des autres formes de déclarations d'identifiant ont une portée de bloc.Aperçu
Scope est la zone de la base de code où l'identifiant est valide.
L'environnement lexical est le mappage entre les noms d'identifiants et les valeurs qui leur sont associées.
Une portée est formée par une imbrication liée d'environnements lexicaux, chaque niveau d'imbrication correspondant à l'environnement lexical d'un contexte d'exécution ancêtre.
Ces environnements lexicaux liés forment une « chaîne » de portée. La résolution d'identifiant est le processus de recherche tout au long de cette chaîne d'un identifiant correspondant.
La résolution des identifiants se fera uniquement vers l'extérieur. De cette façon, l’environnement lexical externe ne peut pas « voir » l’environnement lexical interne.
Il y a trois facteurs pertinents pour décider de la portée des identifiants en JavaScript :
Quelques façons de déclarer les identifiants :
var
,let
和const
var
en mode non strict)import
Déclarationeval
Localisation de déclaration de certains identifiants :
Style de déclaration
var
Les identifiants
ont une portée de fonctionvar
声明的标识符具有函数作用域,除非它们直接在全局上下文中声明,此时它们将作为全局对象的属性添加,并具有全局作用域。它们在eval
déclarés à l'aide deà moins qu'ils ne soient déclarés directement dans le contexte global, auquel cas ils sont ajoutés en tant que propriétés de l'objet global et ont une portée globale. Il existe des règles distinctes pour leur utilisation dans les fonctions
.let
和const
let et const Les identifiantsRemarque :
let
,const
和var
都被提升。这意味着它们的逻辑定义位置是其封闭作用域(块或函数)的顶部。但是,使用let
和const
Les variables déclarées ne peuvent pas être lues ou attribuées tant que le flux de contrôle n'a pas traversé le point de déclaration dans le code source. Cette période temporaire est appelée zone morte temporaire.