最佳答案
你能解释一下在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);
}();
你能给我解释一下吗?