Даже после чтения Вы не знаете JS и JavaScript: 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