Istnieje opcja JSLint , jedna z dobrych części, która „[wymaga] powiązań wokół natychmiastowych wywołań”, co oznacza, że konstrukcja
(function () {
// ...
})();
zamiast tego musiałby być zapisany jako
(function () {
// ...
}());
Moje pytanie jest takie - czy ktoś może wyjaśnić, dlaczego tę drugą formę można uznać za lepszą? Czy jest bardziej odporny? Mniej podatne na błędy? Jaką ma przewagę nad pierwszą formą?
Odkąd zadałem to pytanie, zrozumiałem, jak ważne jest wyraźne wizualne rozróżnienie między wartościami funkcji a wartościami funkcji. Rozważmy przypadek, w którym wynikiem natychmiastowego wywołania jest prawa strona wyrażenia przypisania:
var someVar = (function () {
// ...
}());
Choć peryferyjne nawiasy są składniowo niepotrzebne, nawiasem otwierającym daje wskazanie up-front, że wartość jest przyporządkowana jest nie sama funkcja, ale raczej wynikiem funkcji jest wywoływany.
Jest to podobne do rady Crockforda dotyczącej kapitalizacji funkcji konstruktora - ma służyć jako wizualna wskazówka dla każdego, kto patrzy na kod źródłowy.