Javascript сообщества.
Курс Энтони Алисы под названием «Понимание странных частей» (ECMAScript 5), раздел 2, видео 16. Я думаю, что я обнаружил несоответствие в том, как интерпретатор JS выполняет функции с использованием цепочки областей видимости ,
Я понимаю, что все в Javascript происходит в своем собственном контексте выполнения, создается глобальный объект, затем создается каждая выполняемая функция, помещается в стек, удаляется из стека и т. Д. c .. I взять это.
Однако я не понимаю цепочку областей действия, когда функция помещается в стек выполнения на том же уровне, что и глобальный контекст, почему она не будет выходить за пределы и в глобальный контекст для значения переменной и вместо этого console.log это как неопределенное.
Пожалуйста, посмотрите на следующий код в качестве примера:
//Following function is created within the global execution context
function a3() {
console.log(myVar3); //The console.log generates a 'undefined' here, why not a 1?
function b3(){
console.log(myVar3); //console.log generates a 2, because it follows the scope chain
//and looks outside of its execution context; why does function a3
//not do this with the global context?
}
var myVar3 = 2;
b3();
}
var myVar3 = 1; // Global execution context
a3(); // Global execution context
Почему console.log в функции a3 не смотрит на глобальный контекст выполнения и печатает 1 для ценность? Это кажется несовместимым с тем же шаблоном для вызова функции в пределах от a3 до b3. myVar3 внутри функции b3 выходит за пределы контекста выполнения и находит значение 2.
Пожалуйста, кто-нибудь может объяснить, почему такое противоречивое обращение?
Я пытаюсь получить хорошее базовое понимание, прежде чем узнаю о последних возможностях ECMAScript. Пожалуйста, предлагайте комментарии только для ECMAScript 5 назад, когда использовалось ключевое слово var, а не последние конструкции let или const.
Спасибо за любые ответы!