【问题标题】:JavaScript Closure [duplicate]JavaScript 闭包 [重复]
【发布时间】:2014-08-16 22:04:05
【问题描述】:

我有一个关于 Javascript 闭包的简单问题:

给出如下函数:

function outside() {
  var out = 0;
    function inside() {
    out +=1;
    }
  return inside;
} 

var ref = outside();
ref();  
ref();

如果我调用该函数 2 次,out 等于 2。

为什么out没有被语句覆盖?

var out = 0;

【问题讨论】:

  • 我认为理解它的最好方法就是去体验它。使用此代码制作一个测试页面(或小提琴),然后使用浏览器的调试器逐步完成它。

标签: javascript scope closures


【解决方案1】:

语句var out = 0 不在outside() 返回的函数内。它仅在您调用 outside() 时运行,而不是在您调用 ref()(与 inside() 相同)时运行。

【讨论】:

  • 谢谢,我完全错过了outside()的return语句
【解决方案2】:

outside() 返回inside。所以ref = inside。当您拨打ref() 时,就像拨打inside() 一样。

inside 的范围为outside,其中包含out。当您调用 ref() 时,它会在 outside 的单个范围内增加 out 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2017-07-22
    • 2021-10-22
    • 2021-09-28
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多