1

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

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

所以在这里,如果我运行这段代码,函数 A 会得到一个错误消息:“myVar is not defined”,因为它无法访问函数 B 的变量,这是我不理解的。

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

它应该包括作用域链、激活对象和“this”关键字和 在作用域链中应该是父执行上下文的所有变量/激活对象

因此,换句话说,其作用域链对象中的函数 A 应该具有函数 Bs 所有变量(但显然情况并非如此,这是我不明白的)。

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

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

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

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

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

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

干杯,非常感谢。

4

1 回答 1

0

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

于 2018-04-08T23:33:17.903 回答