【发布时间】:2019-09-24 21:23:28
【问题描述】:
所以,最近我一直在尝试学习 javascript,结果遇到了这段代码
var add = (function () {
var counter = 0;
return function () {counter += 1; return counter}
})();
add();
add();
add();
通过执行此操作,计数器变为 3。但是有些事情我很难理解。比如 return function 语句在做什么?对我来说,似乎在函数内部返回了另一个匿名函数。但我不知道这段代码是如何工作的。几个小时以来,我一直在努力理解这一点。
这是另一个代码:
function add() {
var counter = 0;
counter += 1;
return counter;
}
// Call add() 3 times
add();
add();
add();
但它返回计数器值为 1(我理解),那么为什么前面的代码返回 3。我需要深入的解释。我花了几个小时在 w3schools、mdn 文档和 youtube 教程上学习闭包,我想我已经理解了闭包(至少是其中的一部分)。但我无法理解这段代码。所以,我真的需要你的帮助。谢谢。
【问题讨论】:
-
在第一个示例中,计数器存储在闭包中,在第二个示例中,您每次执行 add 时都会创建一个新的计数器变量
-
这里是closures的一些文档
标签: javascript closures