为什么函数 B 的执行上下文不将其激活对象传递给函数 A-s 作用域链对象,即 A 可以访问 B 的变量

Why execution context of function B doesnt pass its activation-object into function A-s scope-chain-object, that A has acces to variables of B

大家好,感谢阅读我的问题。所以我从 2 天开始就在研究这个问题,但没有找到任何答案,所以感谢你的帮助。所以这是下面的代码:

function A(){
    console.log(myVar);
}
function B(){
    var myVar = 2;
    A();
}
B();

所以这里如果我 运行 这段代码,函数 A 会得到一个错误信息:"myVar is not defined",因为它不能访问函数 B 的变量,这是我不明白的.

据我所知,当代码开始 运行 时,全局执行上下文将由 javascript 引擎创建,每次引擎为函数调用调用括号时 - 和满足其他一些条件,javascript 为已调用的函数创建一个执行上下文对象。

它应该包括作用域链、激活对象和"this"关键字并且在作用域链中应该是父执行上下文的所有variable/activation对象

所以换句话说,其范围链对象中的函数 A 应该具有函数 B-s 所有变量(但显然情况并非如此,这是我不明白的)。

但是如果我运行这段代码,其中函数A-s定义嵌套在函数B中:

function B(){
  var myVar = 2;
 A();
   
    function A(){
    console.log(myVar);
    }
}
B();

所以现在函数 A 将可以访问函数 B 中声明和初始化的变量。

但在我看来,函数 A 在哪里定义并不重要,因为它是在函数 B 的上下文中调用的。

即使在创建阶段定义了 this 关键字值,它的值也将基于函数调用的位置和方式,而不是定义的位置。

感谢你们阅读了我的大量文字,我真的很感激。 并感谢您提供的每一个答案或任何类型的文章或材料,它们可以帮助我理解这种异常现象。

干杯,非常感谢。

在JavaScript中,函数的词法环境被称为词法,因为它是由程序的静态结构决定的,而不是函数调用的地方。这意味着 function A() 的外部词法环境将是声明 function A() 的环境,而不是被调用的环境。