为什么我的 inner inner 函数可以访问外部全局范围变量?这不是违反了scope/closure吗?
How come my inner inner function has access to outside global-scope variables? Isn't that a violation of scope/closure?
我试图通过以下测试代码来巩固我对 JavaScript 中 closure/scoping 的理解:
var globalM = 1;
function firstFx() {
function secondFx () {
console.log(globalM + 1);
}
secondFx();
}
firstFx();
我知道 firstFx 可以访问 globalM,因为它在它的范围内。但是我的内部函数 secondFx 怎么也可以访问 globalM 变量呢?它达到了 2 个级别,我认为这是不可能的?然而 2 的结果被记录到控制台。
您的第二个函数可以访问它,因为该变量是全局变量。这意味着任何地方的所有范围都可以访问它。
任何范围都可以访问全局或更高级别声明的任何内容。例如,在您的函数中,内部函数还可以访问在您的外部函数中声明的任何变量。
范围级别没有限制,它一直延伸到全局范围。
函数中代码的范围是创建函数的范围加上它自己的范围。
我试图通过以下测试代码来巩固我对 JavaScript 中 closure/scoping 的理解:
var globalM = 1;
function firstFx() {
function secondFx () {
console.log(globalM + 1);
}
secondFx();
}
firstFx();
我知道 firstFx 可以访问 globalM,因为它在它的范围内。但是我的内部函数 secondFx 怎么也可以访问 globalM 变量呢?它达到了 2 个级别,我认为这是不可能的?然而 2 的结果被记录到控制台。
您的第二个函数可以访问它,因为该变量是全局变量。这意味着任何地方的所有范围都可以访问它。
任何范围都可以访问全局或更高级别声明的任何内容。例如,在您的函数中,内部函数还可以访问在您的外部函数中声明的任何变量。
范围级别没有限制,它一直延伸到全局范围。
函数中代码的范围是创建函数的范围加上它自己的范围。