Même après avoir lu Vous ne savez pas JS et JavaScript: Le Cœur , je ne pouvais toujours pas à comprendre le comportement de la suite du code.
Pourquoi, quand je l'appelle counter()()
, ne je n'ai pas de fermeture, mais si je assigner une variable à la suite de l' counter()
, comme var getClosure = counter()
, je puis obtenir une fermeture lors de l'appel d' 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