javascript中括号的功能是什么?

时间:2013-05-28 09:12:14

标签: javascript

我知道大多数人使用以下脚本,如

(function(){})();

用于匿名函数调用。但周围的parantheses的功能是什么?

var g = (); // syntax error, why?
var g= (function(){}); // correct

有人可以帮我解释一下吗?

4 个答案:

答案 0 :(得分:5)

()用于对表达式进行分组。当里面没有表达式时,它的语法错误。

为了说明它,请参阅以下示例。

var x = 5; // works
var y = (5); // works
var z = (); // syntax error!

答案 1 :(得分:1)

函数表达式的括号是使它成为表达式。

命名函数的语法太相似,函数表达式在没有括号的情况下工作:

function(){}();
        ^
        |______ syntax error, function name expected

在使用函数表达式的其他情况下,已经知道它必须是一个表达式,例如:

var f = function(){};

答案 2 :(得分:1)

()用于JavaScript中的一些内容。

方法调用

当用作运算符时,它将用于调用函数,可选地使用参数列表:

var a = function() { console.log(23); }
a() // => 23

当人们使用直接调用创建闭包的匿名函数时,可以看到这一点。就像你的例子一样:

(function(){})();

虽然我猜大多数人会这样写:

(function(){}());

表示该函数已分组,表达式是整体的一部分。这导致了另一个用例:

对表达式进行分组

()可用于对表达式进行分组。像这样:

(1,2,3);

()将是语法错误。但这可行:

a = (1,2,3);
console.log(a); // => 3

在您的示例中就是这种情况:

var g = (function(){});
已为

g分配了一个匿名函数作为其值。这也可行:

var g = function() {};

同样的效果。

分组没有直接的价值,但是当你考虑为闭包创建匿名函数时,这非常重要:

function() {
    // your code
}(); // => Syntax Error

但这会奏效:

(function() {
    return 12;
}());

表达式被分组。

答案 3 :(得分:0)

  1. (function(){})();。这是一个立即调用的函数表达式(IIFE)。这是一种非常流行的模式,用于避免碰撞。请参阅this article

  2. var g= (function(){})。这是一个有效的变量分配。实际上,在执行此语句之后,g变量包含该函数。我们试试这个:

      var g = (function(){console.log('hello')});
      g();
    
  3. var g = ();。这不是语言规范的有效语法。有关详细信息,请参阅ECMAScript Language Specification