你能解释一下JavaScript中封装的匿名函数语法背后的原因吗?为什么这样做:(function(){})();但这不是:function(){}();?
在JavaScript中,可以创建一个这样的命名函数:
function twoPlusTwo(){
alert(2 + 2);
}
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)
您还可以创建匿名函数并将其分配给变量:
var twoPlusTwo = function(){
alert(2 + 2);
};
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)
您可以通过创建匿名函数来封装代码块,然后将其包装在括号中并立即执行:
(function(){
alert(2 + 2);
})();
Run Code Online (Sandbox Code Playgroud)
这在创建模块化脚本时非常有用,可以避免使当前作用域或全局作用域混乱,并且可能存在冲突的变量 - 例如Greasemonkey脚本,jQuery插件等.
现在,我理解为什么会这样.括号包含内容并仅公开结果(我确定有更好的方法来描述),例如with (2 + 2) === 4.
但我不明白为什么这也不起作用:
function(){
alert(2 + 2);
}();
Run Code Online (Sandbox Code Playgroud)
你能解释一下吗?
作为这个问题的后续仍然试图解决Javascript函数异常,有人可以解释为什么下面的代码有效吗?
我的文字(Javascript Patterns)说明:
如果您创建一个新函数并将其分配给已经拥有另一个函数的同一个变量,那么您将使用新函数覆盖旧函数.
这将使我认为下面的代码中,变量count和name函数的第二个定义时,将重挫test创建.
变量count和name生活在哪里?
$(document).ready(function() {
var test = function() {
var name = 'The Test Function';
var count = 1;
console.log(name + ' has been setup');
test = function() {
console.log('Number of times ' + name + ' has been called: ' + count);
count++;
};
}
test();
test();
test();
test();
test();
});
Run Code Online (Sandbox Code Playgroud)
