Где хранятся глобальные переменные let?

62
7

Я создал переменную навигатора в глобальной области действия и назначил ей строку, используя ключевое слово let.

// in a browser
let navigator = "Hello!";
console.log(navigator ); // "Hello!"
console.log(window.navigator === navigator ); // false

Здесь let navigator значение let navigator window.navigator. Но мне очень любопытно узнать, где именно хранится let navigator?

спросил(а) 2021-01-19T16:22:15+03:00 2 месяца, 3 недели назад
1
Решение
106

Поскольку вы использовали let а не var, он хранится в записи декларативной среды, связанной с объектом глобальной лексической среды, а не на самом глобальном объекте. Записи среды и объекты лексической среды являются механизмами спецификации и не доступны непосредственно в коде (и, следовательно, их реализация может варьироваться в зависимости от механизма JavaScript).

Это понятие - глобалы, которые не являются свойствами глобального объекта, - это новая вещь, введенная с ES2015; до тех пор все глобальные переменные были свойствами глобального объекта. Начиная с ES2015 привязки идентификаторов let, const и class глобальном уровне не хранятся в глобальном объекте, а вместо этого в отдельной декларативной записи среды.

Записи среды и объекты лексической среды - это те же самые механизмы (как в ES2015+, так и в ES5 и ранее) для хранения локальных переменных внутри функции.

Глобальный аспект этого определяется в §8.2.3 - SetGlobalRealmObject, который, в свою очередь, ссылается на §8.1.2.5 - NewGlobalEnvironment (G, thisValue).

ответил(а) 2021-01-19T16:22:15+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема