JavaScript: ¿Por qué el cierre solo ocurre si asigno la función de retorno a una variable?
Incluso después de leerNo sabes JS yJavaScript: el núcleo Todavía no podía entender el comportamiento del siguiente código.
Porque cuando llamocounter()()
, no obtengo cierre, pero si asigno una variable al resultado decounter()
, me gustavar getClosure = counter()
, Luego recibo un cierre cuando llamogetClosure()
?
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