Оглядываясь назад, я считаю, что взгляды Крокфорда - просто догма. Он говорит:
Когда функция должна быть вызвана немедленно, все выражение вызова должно быть заключено в скобки, чтобы было ясно, что создаваемое значение является результатом функции, а не самой функции.
Что ж, мои аргументы в том, что когда функция вызывается немедленно, почему не ясно, что создаваемое значение является результатом функции, а не самой функции? Рассмотрим:
Получаемое значение является функцией:
var f = function () {
"use strict;"
};
Получаемое значение является результатом функции:
var x = (function () {
"use strict;"
})();
Если вы хотите, чтобы производимое значение было самой функцией, просто не используйте паренсы. В любом случае их не имеет смысла использовать.
Понятно, что есть много программистов, которые по-прежнему переносят выражение функции в скобках, прежде чем присваивать его переменной, или кто-то садист и делает что-то подобное, чтобы сбить с толку Дуга:
var x = function () {
"use strict;"
}();
Однако насколько сложно понять, что происходит? Возможно, в последнем примере вам нужно было бы прокрутить несколько сотен строк кода, чтобы выяснить это, но хороший программист избавил бы других от неприятностей и просто обернул функцию в скобки; или если он скряга:
var x = ~function () {
"use strict;"
}();
Кроме того, я бы даже не стал читать код, написанный кем-то, кто одержимо заставляет меня его проклинать. Возвращаясь к вопросу, хотя причина, по которой я действительно не люблю синтаксис Крокфорда, состоит в том, что он группирует функцию и вызов в одних скобках. Для меня это эквивалентно следующему:
var x = (f());
function f() {
"use strict;"
}
Очевидно, что завершение вызова функции в паренах выглядит немного глупо и излишне, но я так себе это представляю, и меня это всегда раздражает, но каждый по-своему. Лично я думаю, что мой синтаксис выглядит чище.