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