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