我看过一些JavaScript代码,在函数的右花括号之后紧跟着使用圆括号,但我不理解它们的用途。
示例:
示例:
function foo(bar){
return bar;
}(0);
什么是
(0)
的作用?这个叫什么?
在什么情况下应该使用这种技术?
function foo(bar){
return bar;
}(0);
什么是 (0)
的作用?
这个叫什么?
在什么情况下应该使用这种技术?
他们立即调用函数,就像你调用函数一样:
function foo() {
alert('hello');
}
foo(); // call
您也可以直接进行调用:
(function foo(){
alert('hello');
})(); // <--------------
目前您有函数声明
。要实际进行自调用,您需要像这样在括号中书写它(以将其变成表达式):
(function foo(bar){
return bar;
})(0);
现在它是函数表达式
,并将立即调用。要了解函数声明
和函数表达式
之间的区别,请查看Kangax的这篇优秀文章:
(0)是什么意思?
这是传递给foo
函数的参数,所以函数内的bar
将为0
。
这叫什么名字?
这是自执行函数或自调用函数。您可能还想参考此文章。
何时应使用此技术?
当您想立即调用函数并仅在该函数表达式内保留变量范围时。它不会对外部世界或代码表达式之外的代码可用。
了解更多:
(function (...){ ... })(...);
每次都有效,即使是匿名函数,其返回值未分配给变量。 - K..在你的例子中,你只有两个语句,它等价于:
function foo(bar){
return bar;
}
0;
这不是一个自执行函数。第一句话是一个函数声明,第二句话仅仅是数字文字 0
,它并没有任何作用。括号并不是执行函数的,它们是分组运算符。
我们如何证明这一点?尝试:
function foo(bar){
return "bar";
}(0);
并告诉我输出结果。
如果我们有一个函数表达式,那么它将是自调用函数。为此,您可以使用分组运算符强制将其作为表达式进行评估。
例如:
(function foo(bar){
return bar;
})(0);
这是一个具名的函数表达式。表达式的结果((function ....)
)是一个函数引用,而(0)
会执行这个函数,并以0
作为参数传递。
括号的位置也可以是:
(function foo(bar){
return bar;
}(0));
也许这就是你所看到的内容。
这种技术已经在这里得到了广泛讨论:什么是 JavaScript 中自执行函数的作用?
这是一个自调用函数。您将0作为参数传递。因此,您的函数将返回等于0的bar。
例如,下面的函数是等效的:
function foo(bar) {
return bar;
}
foo(0); // returns 0