c вопрос об обучении Javascript, контекст выполнения, стек, замыкания - PullRequest
0 голосов
/ 12 марта 2020

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.

Спасибо за любые ответы!

...