1

可能重复:
javascript中自执行函数的目的是什么?
解释 JavaScript 封装的匿名函数语法

例如:

(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();

我知道我们想创建自己的范围来防止变量冲突,但为什么 javascript 需要有 ()()?

4

3 回答 3

5

这使它成为一个自我调用的匿名函数。

(function() { 
    /* function body */ 
}) /* <-- end of function definition */ (); // <-- invoke that function immediately
于 2012-08-19T18:46:37.353 回答
5

那没有()(),它有(function(){})()

函数语法是function(){},函数调用运算符是()。包装函数的括号在技术上并不特殊,您可以将它们替换为!

!function(){}()

这样做是行不通的:

function(){}()

因为 this 在语句上下文中,所以function开始一个函数声明而不是表达式。然后语法会失败,因为函数声明必须有名称。

如果我们有!function(){}(or (function(){}),那么它就不能是一个语句,因为!(or () 已经需要一个表达式,所以它将被视为一个表达式。

所以你可以在没有任何额外的情况下做到这一点:

var a = function() {
        return false;
}();

因为var a =已经在期待一个表达式,function不可能是函数声明的开始。

检验您的函数是否将被视为表达式或声明的一种简单方法是问自己,我可以在这里使用var x吗?

例如:

var x; //all is fine, so if I said function here, it would be a start of a function declaration

(var x) //Gives an error, so replacing var x with a function would be a function expression

var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression

等等

于 2012-08-19T19:02:47.957 回答
1

第一个结果是函数,与(2)结果相同2。第二个叫它。

于 2012-08-19T18:44:55.933 回答