【发布时间】:2017-11-17 03:21:57
【问题描述】:
即使在阅读了You don't know JS 和JavaScript: The Core 之后,我仍然无法理解以下代码的行为。
为什么,当我调用counter()() 时,我没有得到闭包,但是如果我为counter() 的结果分配一个变量,比如var getClosure = counter(),那么我在调用getClosure() 时得到一个闭包?
function counter() {
var _counter = 0;
function increase() { return _counter++ }
return increase;
}
// Double ()() to call the returned function always return 0, so no closure.
counter()() // returns 0
counter()() // returns 0
counter()() // returns 0
counter()() // returns 0
var createClosure = counter();
createClosure() // returns 0
createClosure() // returns 1
createClosure() // returns 2
createClosure() // returns 3
【问题讨论】:
-
counter()每次都创建一个新的闭包?
标签: javascript closures