So closure is when the variable(s) inside the sub function are stored.
Pretty much. Closure refers to the mechanism that stores those variables and attaches them to that inner function (i.e., what you called a sub function).
They can be changed with every call of the original function is called with different parameters.
It depends on many things, but in this example and I think in general, no.
If by original function you mean outer function, and if like here the outer functions variable's are parameters and local to that function, and those variables are captured in an inner function via closure, those variables/parameters are created anew each time the outer function is called.
Those variables in the closure in this challenge are only changed in the inner function, not when the outer function is called. They are initialized in the outer function.
Note there are ways, though, you could modify captured variables outside the closure.
Am I starting to get it?
Yes, I think so. Hopefully the above and the docs below tie up any loose ends.
And this is why closures are so cool?
I think they're necessary, or at least very useful, in es5, but only because of deficiencies in the language.
The main one is to make truly private variables, which is considered such good style you can pretend that's a necessity.
There are better ways to do this in better languages, and es6 does improve upon this particular use of closures. Not sure if it eliminates the use of closures overall, or even in this case, though.
I can explain that last bit better if required. Please ask.
And, other arguments, additions, etc. are welcome from others!