我见过Javascript代码在函数关闭大括号后立即使用括号,我无法理解它们的用途。
示例:
function foo(bar){
return bar;
}(0);
(0)
做什么?
这叫什么?
您应该何时使用此技术?
答案 0 :(得分:12)
它们会立即调用与调用函数时类似的函数:
function foo() {
alert('hello');
}
foo(); // call
您也可以直接将其称为 :
(function foo(){
alert('hello');
})(); // <--------------
目前您有Function Declaration
。 要实际自我调用 ,您需要在括号中使用它(使其成为表达式):
(function foo(bar){
return bar;
})(0);
现在它是Function Expression
并将立即调用。要了解Function Declaration
和Function Expression
之间的区别,请查看Kangax的优秀文章:
(0)做什么?
参数传递给foo
函数,因此bar
在函数内部为0
。
这叫什么?
这是一种自动进行或自动执行的功能。您可能还想查看this。
你什么时候应该使用这种技术?
当您想立即调用函数并仅将变量范围保留在该函数表达式中时。它不适用于外部世界,也不适用于函数表达式之外的代码。
了解详情:
答案 1 :(得分:9)
在您的示例中,您只有两个语句,它等同于:
function foo(bar){
return bar;
}
0;
这是不是自我调用功能。第一个语句是函数声明,第二个语句只是数字文字0
,它不做任何事情。括号不执行该函数,它们是grouping operator。
我们如何证明这一点?尝试:
function foo(bar){
return "bar";
}(0);
告诉我输出是什么。
如果我们有函数表达式,那将是一个自我调用的函数。为此,您可以使用分组运算符强制将其作为表达式进行求值。
例如:
(function foo(bar){
return bar;
})(0);
这是一个命名的函数表达式。表达式((function ....)
)的结果是函数引用,(0)
执行函数,将0
作为参数传递。
括号的位置也可以是:
(function foo(bar){
return bar;
}(0));
也许这就是你所看到的。
此技术已在此处进行了广泛讨论:What is the purpose of a self executing function in javascript?
答案 2 :(得分:0)
这是一个自我调用函数。您传递0作为参数。因此,您的函数将返回等于0的条。
例如,以下函数是等效的:
function foo(bar) {
return bar;
}
foo(0); // returns 0