Назад к вопросам
Junior
93
questionbank
Что такое область видимости в JavaScript?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Область видимости (Scope) в JavaScript — это контекст, в котором определены и доступны переменные и функции.
Проще говоря, она определяет, где можно ссылаться на переменную или функцию в коде.
Существует несколько типов областей видимости:
- Глобальная область видимости (Global Scope): Переменные, объявленные вне любых функций, находятся в глобальной области видимости. Они доступны из любого места в коде.
// Глобальная переменная let globalVar = "Я виден везде"; function showGlobal() { console.log(globalVar); // Доступна в функции } showGlobal(); - Локальная (функциональная) область видимости (Local/Function Scope): Переменные, объявленные внутри функции, находятся в локальной области видимости этой функции. Они доступны только этой функции и вложенным в нее функциям, но не доступны снаружи.
function showLocal() { // Локальная переменная let localVar = "Я виден только здесь"; console.log(localVar); } showLocal(); // console.log(localVar); // Ошибка: localVar не определена - Блочная область видимости (Block Scope): Появилась с ES6 (ES2015) с введением
letиconst. Переменные, объявленные с помощьюletилиconstвнутри фигурных скобок ({}), будь то блоки кода, циклы или условные операторы, имеют блочную область видимости. Переменные, объявленные сvar, не имеют блочной области видимости.if (true) { // Переменная с блочной видимостью let blockVar = "Я виден только в этом блоке"; console.log(blockVar); } // console.log(blockVar); // Ошибка: blockVar не определена for (let i = 0; i < 2; i++) { // Переменная с блочной видимостью в цикле console.log(i); } // console.log(i); // Ошибка: i не определена (если был использован let)
Важно также понимать концепцию цепочки областей видимости (Scope Chain). Когда JavaScript пытается найти значение переменной, он сначала смотрит в текущей области видимости. Если переменная не найдена там, он переходит к внешней (родительской) области видимости и так далее, вплоть до глобальной области видимости. Если переменная не найдена даже в глобальной области видимости, выбрасывается ошибка ReferenceError.