Javascript — это язык, в котором почти нет ничего похожего на Java, кроме названия. Чтобы понять какую-то странную часть Javascript, лучше сначала изучить несколько концепций Javascript.

Готовый? Давайте начнем.

Что такое контекст выполнения? На самом деле, это намного проще, чем звучит слово. Это детали среды, в которой выполняется код Javascript. Существует два типа контекста выполнения: глобальный и функциональный. Каждый контекст выполнения имеет свою собственную переменную среду и ссылку на внешнюю среду.

Давайте поймем контекст выполнения, прочитав код ниже:

Javascript работает синхронно, это означает, что ваш код запускается в одном контексте выполнения в одно и то же время. Когда приложение запускается, создается глобальный контекст выполнения A. При его создании настраивается как переменная среда (VEA), так и ссылка на внешнюю среду (Link A).

Когда строка 1 выполняется, движок javascript находит переменную «имя» в среде переменных (VEA) и устанавливает для нее значение «Даниэль». Затем, перед вызовом Greet(), глобальный контекст выполнения A помещается в стек. Создается контекст выполнения функции B. Опять же, во время создания движок Javascript создает переменную среду (VEB) и ссылку на внешнюю среду (ссылка B) для контекста выполнения B. Поскольку лексическое окружение функции приветствия() является глобальным, ссылка B указывает на ее внешнюю среду, которая ВЭА.

Когда код "console.log('привет,'+имя);" выполняется, движок javascript сначала ищет переменную «имя» в среде переменных VEB. Затем ссылка B ведет к следующему поиску в VEA. Переменная «имя» находится в VEA, и javascript отправляет вывод «привет, Дэниел».

Ссылки на внешнее окружение образуют цепочку, и движок javascript использует эту цепочку для поиска переменной. Мы называем эту цепочку Цепочка масштаба.

Теперь вы знаете, что Javascript ищет переменную в среде переменных через цепочку областей видимости. Вы можете использовать тест ниже, чтобы проверить свои новые знания.