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

Respuestas a la pregunta(3)

Su respuesta a la pregunta