Даниил Ораин: точно, извините, запутался) Значит автор ответа немного преувеличил, что его ответ "то же самое", что и в вопросе. В вопросе сначала возвращается функция, потом вызывается, а тут сначала вызывается и возвращается ее результат.
Вот тут человек наглядные тесты проводил: stackoverflow.com/questions/7629891/functions-that...
Эта функция getFunc() возращает функцию, которая запомнила свое окружение, т.е. локальную переменную "а".
А далее идет вызов функции, что была возращена. getFunc()();
Даниил Ораин: Можно. Просто если для каких-то целей нужно сохранить окружение функции, то это делается так, как указано у вас. Подход называется "Замыкание".
Для чего он нужен? Например вам нужно сделать несколько запросов к серверу и обработать результат каждого запроса.
for (var i = 0; i < 3; i++)
{
query(url).done((function(vl){
return function(){
// здесь вам будет доступно значение i, через переменную vl для обработки результата запроса.
};
})(i));
}
Даниил Ораин: Я вам пример в комментарии выше написал. Нужно когда что-то необходимо сделать потом, как в примере. Сначала отправляются все запросы, а когда придет результат, то они будут обработаны.