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

questionAnswers(3)

yourAnswerToTheQuestion