javascript opération dates - Les instructions let créent-elles des propriétés sur l'objet global?




1 Answers

Les instructions let créent-elles des propriétés sur l'objet global?

Selon la spec , non:

Un enregistrement d'environnement global est logiquement un enregistrement unique, mais il est spécifié comme un encapsulation composite d'un enregistrement d'environnement d'objet et d'un enregistrement d'environnement déclaratif . L' enregistrement d'environnement d'objet a pour objet de base l'objet global du Realm associé. Cet objet global est la valeur renvoyée par la méthode concrète GetThisBinding l'enregistrement d'environnement global. Le composant d'enregistrement d'environnement d'objet d'un enregistrement d'environnement global contient les liaisons pour tous les globaux intégrés ( Realm ) et toutes les liaisons introduites par FunctionDeclaration , GeneratorDeclaration ou VariableStatement contenues dans le code global. Les liaisons de toutes les autres déclarations ECMAScript en code global sont contenues dans le composant d' enregistrement de l'environnement déclaratif de l'enregistrement d'environnement global.

Plus d'explications:

  • Un enregistrement d'environnement déclaratif stocke les liaisons dans une structure de données interne. Il est impossible de saisir cette structure de données de quelque manière que ce soit (pensez à la portée de la fonction).

  • Un enregistrement d'environnement d' objet utilise un objet JS réel en tant que structure de données. Chaque propriété de l'objet devient une liaison et vice versa. L'environnement global possède un objet d'environnement d'objet dont "l'objet de liaison" est l'objet global. Un autre exemple est with .

Maintenant, comme l'indiquent les parties citées, seules les fonctions FunctionDeclaration s, GeneratorDeclaration s et VariableStatement s créent des liaisons dans l'enregistrement d'environnement d' objet de l'environnement global. C'est-à-dire que seules ces liaisons deviennent des propriétés de l'objet global.

Toutes les autres déclarations (par exemple, const et let ) sont stockées dans l'enregistrement d'environnement déclaratif de l'environnement global, qui n'est pas basé sur l'objet global.

du jour

En JavaScript, les déclarations var créent des propriétés sur l'objet global:

var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js

ES6 introduit la portée lexicale avec let déclarations let ayant une portée de bloc.

let x = 15;
{
   let x = 14;
}
console.log(x); // logs 15;

Cependant, ces déclarations créent-elles des propriétés sur l'objet global?

let x = 15;
// what is this supposed to log in the browser according to ES6?
console.log(window.x); // 15 in Firefox
console.log(global.x); // undefined in Node.js with flag



Related