为什么我们要在语句中两次将函数括在括号中

Why do we wrap the function in parenthesis two times in a statement?

本文关键字:两次 函数 我们 语句 为什么      更新时间:2023-09-26

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

例如:

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

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

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

(function() { 
    /* function body */ 
}) /* <-- end of function definition */ (); // <-- invoke that function immediately

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

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

!function(){}()

这样做是行不通的:

function(){}()

因为这在语句上下文中,function启动函数声明而不是表达式。然后语法失败,因为函数声明必须具有名称。

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

因此,您无需任何额外费用即可执行此操作:

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相同。第二个叫它。