С вики, главная фича, цитата:
Functions are first-class; they are objects themselves. As such, they have properties and methods, such as .call() and .bind().[35] A nested function is a function defined within another function. It is created each time the outer function is invoked. In addition, each created function forms a lexical closure: the lexical scope of the outer function, including any constants, local variables and argument values, becomes part of the internal state of each inner function object,
even after execution of the outer function concludes.[36]
Конец цитаты.
Динамическая видимость не чудо
http://en.wikipedia.org/wiki/Scope_%...Function_scope
но вот у js она сохраняется даже после смерти вызывающей функции.
Потому что js интепретатор - ходит бродит по своему массиву смотря что где ассоциировано и если там нассоциировали, то значит оно и берется из данных в то время как текст функции реюзается как текст - интепретируется. Но данные-то уже поменялись - все вот и сшивается. Примерно, конечно.
JS это []{}. Массив объектов.
И в контексте применения в браузерах - это колбэки без которых ничего толком не сделаешь.
У меня с полсотни скриптов на WScript - кто-нить хоть один в жизни такой написал вообще? - и все они унылое гавно чуть более чем полностью. Там же нет ни событий толковых, ни интерфейса глюкавого, но все-таки интерфейса браузера и хтмл - ничего нет. Вот там колбеки нафиг не нужны и там включаешь функцию в функцию чисто чтобы на виду была.
Кстати попутно вычитал что первым именем JavaScript была Mocha. А я думал Gavno.