这似乎是一个曾经被问过几次的话题,但我真的很难找到一个简洁的解释.我能找到的最近的是(JavaScript中的变量范围是什么?)但是有几个方面我还是不太明白.你可能已经猜到我对javascript很新,但是这个方面对于完全理解是否至关重要,如果我要随身携带它.
所以考虑一个由几个嵌套函数组成的程序:
function functionA() {
var functionAVariable = "A";
}
function functionB() {
var functionBVariable = "B";
}
function functionC() {
var functionCVariable = "C";
function functionD() {
var functionDVariable = "D";
}
}
var globalVariable = "G";
var mainFunction = function () {
var mainFunctionVariable = "M";
functionA();
functionB();
functionC();
};
Run Code Online (Sandbox Code Playgroud)
从我的理解所有的功能,将有机会获得globalVariable和functionA,functionB以及functionC将有机会获得mainFunctionVariable.
我开始有点困惑的地方是当我们为整个程序添加更深的巢时functionD.将functionD有机会获得,目前包裹或将它只能访问直接父所有更高级别的功能变量,functionC?
根据我的理解,所有功能都可以访问
globalVariable
正确
和functionA,functionB和functionC将有权访问mainFunctionVariable.
不可以.只有分配给它的匿名功能才mainFunction有权访问mainFunctionVariable.范围取决于创建函数的位置,而不是函数的调用位置.
我开始有点困惑的地方是我们在整个程序中添加更深层的嵌套,就像使用functionD一样.函数D是否可以访问当前包装它的所有更高级别的函数变量,还是只能访问直接父函数c?
函数可以访问自己范围内和更广范围内的所有变量(除非它们被另一个同名变量掩盖).
var x = 1;
function a() {
var y = 2;
function b() {
var z = 3;
function c() {
alert([x, y, z]);
}
c();
}
b();
}
a();Run Code Online (Sandbox Code Playgroud)