Синтаксис немедленного вызова функции



есть JSLint вариант, одна из хороших частей на самом деле, что "[требует] parens вокруг немедленных вызовов", что означает, что конструкция



(function () {

// ...

})();


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



(function () {

// ...

}());


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





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



var someVar = (function () {

// ...

}());


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



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

605   3  

3 ответов:

от Дугласа Крокфорда руководство по соглашению стилей: (поиск "вызывается немедленно")

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

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

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

сразу же Вызванные анонимные функции обернуты в parens, потому что:

  1. они являются функциональными выражениями, и если оставить parens, это приведет к тому, что он будет интерпретироваться как объявление функции, которое является синтаксической ошибкой.

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

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

или, использовать:

void function () {
...
} ()

Comments

    Ничего не найдено.