Резюме
Можете ли вы объяснить обоснование синтаксиса для инкапсулированных анонимных функций в JavaScript? Почему это работает: (function(){})();, но это не так: function(){}();?
Что я знаю
В JavaScript создается некоторая именованная функция:
function twoPlusTwo(){
    alert(2 + 2);
}
twoPlusTwo();
Вы также можете создать анонимную функцию и присвоить ее переменной:
var twoPlusTwo = function(){
    alert(2 + 2);
};
twoPlusTwo();
Вы можете инкапсулировать блок кода, создав анонимную функцию, затем обернув ее в скобки и выполнив ее немедленно:
(function(){
    alert(2 + 2);
})();
Это полезно при создании модульных скриптов, чтобы избежать загромождения текущей области или глобальной области с потенциально конфликтующими переменными - как в случае с скриптами Greasemonkey, плагинами jQuery и т.д.
Теперь я понимаю, почему это работает. Скобки заключают в себе содержимое и выставляют только результат (я уверен, что есть лучший способ описать это), например, с (2 + 2) === 4.
Что я не понимаю
Но я не понимаю, почему это не работает одинаково:
function(){
    alert(2 + 2);
}();
Можете ли вы мне это объяснить?
