澄清javascript中嵌套的函数变量范围

Ash*_*Ash 1 javascript

这似乎是一个曾经被问过几次的话题,但我真的很难找到一个简洁的解释.我能找到的最近的是(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)

从我的理解所有的功能,将有机会获得globalVariablefunctionA,functionB以及functionC将有机会获得mainFunctionVariable.

我开始有点困惑的地方是当我们为整个程序添加更深的巢时functionD.将functionD有机会获得,目前包裹或将它只能访问直接父所有更高级别的功能变量,functionC

Que*_*tin 5

根据我的理解,所有功能都可以访问 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)