【问题标题】:How come my inner inner function has access to outside global-scope variables? Isn't that a violation of scope/closure?为什么我的内部函数可以访问外部全局范围的变量?这不是违反范围/关闭吗?
【发布时间】:2016-01-01 01:55:49
【问题描述】:

我试图通过以下测试代码巩固我对 JavaScript 中的闭包/作用域的理解:

var globalM = 1;

function firstFx() {

    function secondFx () {
        console.log(globalM + 1);
    }

    secondFx();
}

firstFx();

我知道 firstFx 可以访问 globalM,因为它在它的范围内。但是我的内部函数 secondFx 怎么也可以访问 globalM 变量呢?它达到了2级,我认为这是不可能的?然而 2 的结果被记录到控制台。

【问题讨论】:

  • 因为它是全球性的。这意味着所有函数/范围都可以访问它。
  • 达到2级没有错。
  • 谢谢你们,阅读了很多关于闭包/词法作用域的内容,以至于我完全把自己与它的基础知识搞糊涂了。

标签: javascript scope closures


【解决方案1】:

范围级别没有限制,它一直延伸到全局范围。

函数中代码的作用域是创建函数的作用域加上它自己的作用域。

【讨论】:

    【解决方案2】:

    您的第二个函数可以访问它,因为该变量是全局变量。这意味着任何地方的所有作用域都可以访问它。

    任何范围都可以访问全局或更高级别声明的任何内容。例如,在您的函数中,内部函数也可以访问在您的外部函数中声明的任何变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2016-11-13
      • 2015-06-18
      • 1970-01-01
      • 2013-12-25
      • 2016-06-23
      • 2016-08-19
      相关资源
      最近更新 更多