PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

В чем разница между областью видимостью и контекстом?

Объекты и прототипы

Область видимости и контекст — разные понятия: область видимости определяет доступность переменных, а контекст — значение `this` при вызове функции.

Область видимости (scope)

Про переменные: где они доступны. Определяется при объявлении (лексически).

function outer() {
  const a = 1;      // область outer
  function inner() {
    const b = 2;    // область inner
    return a + b;   // a доступна из внешней области
  }
}

Виды: глобальная, функциональная, блочная. Поиск — по цепочке областей наружу.

Контекст (this)

Про объект-владельца вызова: значение this. Определяется при вызове.

const obj = {
  name: 'Ann',
  greet() { return this.name; }, // this = obj при obj.greet()
};

Различия

  • Область видимости — про доступность переменных, задаётся при объявлении (статически).
  • Контекст — про this, задаётся при вызове (динамически).
// scope: какие переменные видны здесь
// context: чему равен this при этом вызове

Частая путаница

Их смешивают, но: область — «где живут переменные», контекст — «кто вызвал / чей это метод». Стрелка берёт this лексически, но это не делает scope и context одним и тем же.

Коротко для собеседования

Область видимости — доступность переменных, определяется местом объявления (лексически, цепочка scope). Контекст — значение this, определяется способом вызова (динамически). Первое про переменные, второе про this; это разные механизмы.

Другие вопросы раздела