嗨伙计们感谢您阅读我的问题。所以我从 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 关键字值是在创建阶段定义的,它的值也将基于函数的调用位置和方式,而不是定义的位置。
谢谢你们的阅读给我带来了大量的文字,我真的很感激。并感谢每一个答案或任何类型的文章或材料,这可以帮助我理解这个异常。
干杯,非常感谢。