例如:
(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
我知道我们想创建自己的范围来防止变量冲突,但为什么 javascript 需要有 ()()?
例如:
(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
我知道我们想创建自己的范围来防止变量冲突,但为什么 javascript 需要有 ()()?
这使它成为一个自我调用的匿名函数。
(function() {
/* function body */
}) /* <-- end of function definition */ (); // <-- invoke that function immediately
那没有()()
,它有(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
等等
第一个结果是函数,与(2)
结果相同2
。第二个叫它。