为什么函数 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()
的环境,而不是被调用的环境。
大家好,感谢阅读我的问题。所以我从 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()
的环境,而不是被调用的环境。