Вопрос проверяет понимание различий между глобальным объектом и глобальной областью видимости в JavaScript.
Переменные var в глобальной области становятся свойствами window, а let и const — нет. Это связано с тем, что let и const создаются в глобальном лексическом окружении, а не как свойства объекта. Они доступны в глобальной области видимости, но не через window. Это сделано для более безопасной и предсказуемой работы со scope.
Важно различать глобальную область видимости и глобальный объект — это не одно и то же.
При объявлении:
var a = 10;
Происходит:
Переменная добавляется в глобальный scope.
Она становится свойством window.
Проверка:
console.log(window.a); // 10
При объявлении:
let b = 20;
const c = 30;
Происходит:
Переменные создаются в глобальном лексическом окружении.
Они не добавляются в объект window.
Проверка:
console.log(window.b); // undefined
Основные причины:
Избежать случайного загрязнения глобального объекта.
Улучшить изоляцию кода.
Сделать поведение более предсказуемым.
Не стоит полагаться на доступ к переменным через window.
Лучше явно экспортировать значения, если они нужны глобально.
Вывод: let и const создают переменные в глобальном scope, но не в глобальном объекте, поэтому они не появляются в window.