Вопрос

Eсть JSLint вариант, фактически один из «Хороших Частей», который «[требует] скобок вокруг немедленных вызовов», что означает, что конструкция

(function () {

  // ...

})();

вместо этого нужно будет записать как

(function () {

  // ...

}());

Мой вопрос заключается в следующем: может ли кто-нибудь объяснить, почему эту вторую форму можно считать лучшей?Он более устойчив?Менее подвержен ошибкам?Какие преимущества она имеет перед первой формой?


Задав этот вопрос, я понял, насколько важно иметь четкое визуальное различие между значениями функций и значениями функций.Рассмотрим случай, когда результатом немедленного вызова является правая часть выражения присваивания:

var someVar = (function () {

  // ...

}());

Хотя крайние круглые скобки синтаксически не нужны, открывающая скобка заранее указывает на то, что присваиваемое значение является нет сама функция, а скорее результат вызова функции.

Это похоже на совет Крокфорда относительно использования заглавных букв в функциях-конструкторах — он призван служить визуальной подсказкой для всех, кто смотрит исходный код.

Это было полезно?

Решение

От Дугласа Крокфорда руководство по конвенциям по стилю:(поиск «вызывается немедленно»)

Если функцию необходимо вызвать немедленно, все выражение вызова должно быть заключено в круглые скобки, чтобы было ясно, что создаваемое значение является результатом функции, а не самой функцией.

По сути, он считает, что это проясняет различие между значениями функций и значениями функций.Итак, это стилистический вопрос, а не существенная разница в самом коде.

обновленная ссылка, старый PPT больше не существует

Другие советы

Сразу Названные Анонимные функции получают завернули в круглых скобках, потому что:

<Ол>
  • Они являются функция выражения и оставляя круглые скобки из заставила бы его интерпретировать как объявление функции, которая является синтаксической ошибкой.

  • Функция выражение не может начинаться с функцией слова.

  • При назначении выражение функции к переменной, сама функция не возвращается, возвращаемое значение функции возвращается , следовательно, круглые скобки оценить, что внутри них и производят значение. когда функция выполняется, а хвостовые круглые скобки ..}() вызвать функцию немедленно выполнить.

  • Или используйте:

    void function () {
    ...
    } ()
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top