【问题标题】:Variable's value of JS ClosureJS Closure 的变量值
【发布时间】:2016-02-23 12:48:00
【问题描述】:

您能否解释一下,当第二次调用函数a 时,变量i 没有重新初始化为零值是如何工作的。谢谢

var a = (function () {
    var i = 0;
    return function () {return i += 1;}
})();

a();
a();

【问题讨论】:

  • 因为a不包含设置i = 0的逻辑。

标签: javascript variables closures


【解决方案1】:

a 的值不是ivar 语句中声明的函数。相反,a 是在 a 的初始化期间调用该函数返回的函数。因此,a 是函数

function() { return i += 1; }

该函数中的i 指的是封闭匿名函数中的i。它本质上是一个持久值,a 函数每次调用时都可以引用(和修改)它。

【讨论】:

  • 所以,如果我做对了,我应该认为“i”变量是在“a”函数之外声明的(它类似于全局变量)?
  • @M_V 是的,在那个函数中i 是“相对全局的”。它没有在该函数中声明,但在调用外部匿名函数时形成的 closure 中可用。
猜你喜欢
  • 2017-08-04
  • 1970-01-01
  • 2020-07-25
  • 2021-11-19
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多