我已经看到 Javascript 代码在函数的右花括号后立即使用括号,我不明白它们的用途。
例子:
function foo(bar){
return bar;
}(0);
做什么
(0)
?这个叫什么?
什么时候应该使用这种技术?
我已经看到 Javascript 代码在函数的右花括号后立即使用括号,我不明白它们的用途。
例子:
function foo(bar){
return bar;
}(0);
做什么(0)
?
这个叫什么?
什么时候应该使用这种技术?
它们立即调用函数,类似于调用函数时:
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
在函数内部。
这个叫什么?
它是一个自我更新或自我执行的功能。您可能还想看看这个。
什么时候应该使用这种技术?
当您想立即调用函数并将变量范围仅保留在该函数表达式内时。外部世界或该函数表达式之外的代码将无法使用它。
学到更多:
在您的示例中,您只有两个语句,它相当于:
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