Резюме
Можете ли вы объяснить обоснование синтаксиса для инкапсулированных анонимных функций в 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);
}();
Можете ли вы мне это объяснить?