Існує варіант JSLint , одна з хороших частин насправді, що "[вимагає] паронів навколо негайних викликів", що означає, що конструкція
(function () {
// ...
})();
замість цього потрібно писати як
(function () {
// ...
}());
Моє запитання таке: чи може хтось пояснити, чому ця друга форма може вважатися кращою? Це більш стійкий? Менше схильних до помилок? Яку перевагу він має перед першою формою?
Задавши це запитання, я зрозумів важливість чіткого візуального розмежування значень функцій та значень функцій. Розглянемо випадок, коли результатом негайного виклику є права частина виразу призначення:
var someVar = (function () {
// ...
}());
Хоча самі зовнішні дужки є синтаксично непотрібними, що відкриваються дужки дають попередній показник того, що присвоєне значення не є самою функцією, а результатом викликаної функції.
Це схоже на поради Крокфорда щодо капіталізації функцій конструктора - він повинен слугувати візуальною підказкою для всіх, хто дивиться на вихідний код.