花括号后的括号是什么意思?

时间:2012-06-21 10:30:02

标签: javascript

我见过Javascript代码在函数关闭大括号后立即使用括号,我无法理解它们的用途。

示例:

function foo(bar){
  return bar;
}(0);
  • (0)做什么?

  • 这叫什么?

  • 您应该何时使用此技术?

3 个答案:

答案 0 :(得分:12)

它们会立即调用与调用函数时类似的函数:

function foo() {
   alert('hello');
}

foo(); // call

您也可以直接将其称为

(function foo(){
   alert('hello');
})(); // <--------------

目前您有Function Declaration 要实际自我调用 ,您需要在括号中使用它(使其成为表达式):

(function foo(bar){
  return bar;
})(0);

现在它是Function Expression并将立即调用。要了解Function DeclarationFunction 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