Проверяет понимание области видимости переменных в JavaScript и механизма создания глобальных свойств при неявном объявлении.
В JavaScript, если присвоить значение переменной, которая не была объявлена с помощью var, let или const, интерпретатор автоматически создаёт свойство на глобальном объекте (window в браузере, global в Node.js). Это происходит на этапе выполнения, а не на этапе компиляции.
function test() {
myVar = 10; // неявное объявление
}
test();
console.log(myVar); // 10 — переменная доступна снаружи
console.log(window.myVar); // 10 — это свойство window
Когда движок JavaScript встречает присваивание myVar = 10, он сначала ищет переменную myVar в текущей области видимости. Если не находит, поднимается по цепочке областей видимости до глобальной. Если и там нет объявления, движок создаёт новое свойство на глобальном объекте.
В строгом режиме ('use strict') такое поведение запрещено. При попытке присвоить значение необъявленной переменной выбрасывается ReferenceError. Это помогает избежать случайного загрязнения глобальной области видимости.
'use strict';
function test() {
myVar = 10; // ReferenceError: myVar is not defined
}
test();
Неявное объявление переменных считается плохой практикой, так как может привести к трудноотловимым ошибкам и конфликтам имён. Всегда используйте let, const или var для явного объявления переменных. В современных проектах рекомендуется включать строгий режим и использовать линтеры (например, ESLint) для предотвращения таких ситуаций.
Неявное объявление переменной внутри функции делает её глобальной, что может нарушить изоляцию кода и привести к неожиданным побочным эффектам. Используйте явное объявление и строгий режим для написания надёжного и предсказуемого JavaScript-кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию