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