Существует опция JSLint , одна из действительно хороших частей, которая «[требует] прощения вокруг немедленных вызовов», то есть конструкция
(function () {
// ...
})();
вместо этого нужно записать как
(function () {
// ...
}());
У меня такой вопрос: может кто-нибудь объяснить, почему эту вторую форму можно считать более подходящей? Это более устойчивым? Менее подвержен ошибкам? Какое преимущество оно имеет по сравнению с первой формой?
С тех пор, как я задал этот вопрос, я осознал важность четкого визуального различия между значениями функций и значениями функций. Рассмотрим случай, когда результатом немедленного вызова является правая часть выражения присваивания:
var someVar = (function () {
// ...
}());
Хотя самые внешние скобки синтаксически не нужны, открывающая скобка дает предварительное указание на то, что назначаемое значение не , а сама функция, а скорее результат ее вызова.
Это похоже на совет Крокфорда относительно использования заглавных букв функций конструктора - он предназначен для визуальной подсказки любому, кто смотрит на исходный код.