Назад к вопросам
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.