В чем разница между областью видимостью и контекстом?
Объекты и прототипы
Область видимости и контекст — разные понятия: область видимости определяет доступность переменных, а контекст — значение `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; это разные механизмы.