这似乎是一个多次被问过的话题,但我真的很难找到一个简洁的解释。我能找到的最近的是(What is the scope of variables in 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();
};
根据我的理解,所有功能都可以访问globalVariable
和functionA
,functionB
和functionC
可以访问mainFunctionVariable
。
当我开始有点困惑的时候,我们会像functionD
那样为整个程序添加更深的嵌套。 functionD
是否可以访问当前包装它的所有更高级别的函数变量,还是只能访问直接父级functionC
?
答案 0 :(得分:5)
根据我的理解,所有功能都可以访问
globalVariable
正确
和functionA,functionB和functionC可以访问mainFunctionVariable。
没有。只有分配给mainFunction
的匿名函数才能访问mainFunctionVariable
。范围取决于创建函数的位置,而不是函数的调用位置。
我开始有点困惑的地方是我们在整个程序中添加更深层的嵌套,就像使用functionD一样。函数D是否可以访问当前包装它的所有更高级别的函数变量,还是只能访问直接父函数function?
函数可以访问自己范围内和更广范围内的所有变量(除非它们被另一个同名变量掩盖)。
var x = 1;
function a() {
var y = 2;
function b() {
var z = 3;
function c() {
alert([x, y, z]);
}
c();
}
b();
}
a();
答案 1 :(得分:0)
变量的范围仅适用于声明它的函数本身。如果我们需要将一个函数的变量访问到另一个函数,那么我们必须将它作为我们需要访问的函数的参数传递,否则我们必须创建全局变量,全局变量可以在脚本的所有函数中访问。
以上示例
functionAVariable is accessible only in functionA,
functionBVariable is accessible only in functionB and
functionCVariable is accessible only in functionC.
您无法访问functionCVariable
functionD
,mainFunctionVariable
只能mainFunction
访问mainFunctionVariable
。
functionA, functionB, functionC
无法访问globalVariable
。
可以在所有函数中访问变量datatype
。
如果声明变量而未指定var
之类的任何functionA
,则默认情况下将其视为全局变量。
假设我们有function functionA() {
var functionAVariable = "A";
globVariable = 10;
}
喜欢
functionAVariable
在上面的代码段中,functionA
只能在globVariable
中访问,但run.sh
现在的行为类似于全局变量。