Проверяет понимание различий между глобальными объектами Node.js и браузера, а также механизмов изоляции модулей и областей видимости.
Глобальный объект — это корневой объект среды выполнения, который содержит встроенные функции и переменные, доступные из любого места программы. В браузере это window, в Node.js — global. Начиная с ES2020 существует универсальный globalThis, который ссылается на глобальный объект в любой среде.
В браузере window — это и глобальный объект, и объект, представляющий окно. Присвоение window.foo = 'bar' создаёт глобальную переменную foo, доступную как foo или window.foo. Это работает, потому что глобальная область видимости в браузере — это сам объект window.
window.foo = 'bar';
console.log(foo); // 'bar'
console.log(window.foo); // 'bar'
В Node.js каждый файл является модулем и обёрнут в функцию, поэтому переменные, объявленные через var, let или const, не попадают в global. Однако прямое присвоение global.foo = 'bar' добавит свойство в глобальный объект, и оно будет доступно во всех модулях через global.foo.
global.foo = 'bar';
console.log(global.foo); // 'bar'
console.log(foo); // ReferenceError: foo is not defined
Обратите внимание: в Node.js foo не станет глобальной переменной, потому что модульная обёртка изолирует область видимости. Доступ возможен только через global.foo.
global усложняет тестирование и отладку, так как состояние разделяется между модулями.Итог: присвоение свойства глобальному объекту работает в обеих средах, но в Node.js оно не создаёт локальную переменную, а в браузере — создаёт. Использовать глобальные переменные стоит только в крайних случаях, например для полифилов или флагов окружения, и лучше через globalThis для кроссплатформенности.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию