JavaScript: Por que o fechamento só acontece se eu atribuir a função de retorno a uma variável?
Mesmo depois de lerVocê não conhece JS eJavaScript: o núcleo Eu ainda não conseguia entender o comportamento do código a seguir.
Por que, quando eu ligocounter()()
, não recebo fechamento, mas se eu atribuir uma variável ao resultado decounter()
, gostarvar getClosure = counter()
, Então eu fecho quando chamogetClosure()
?
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