JavaScript中的()是什么意思?

3

我正在测试JavaScript中的立即执行函数。 我发现在Chrome中运行下面的代码时,会抛出Uncaught SyntaxError: Unexpected token )错误。

function foo(){
    console.log(1);
}();

我认为解析器将这段代码拆分为两个部分:一个函数声明和()。但如果我在()之间添加1会发生什么,结果表明它不会引发任何错误。

所以我想(1);是一个有效的表达式,但是它代表什么?

谢谢回答。


3
(1)的意思与(1+0)var x =2, y=1; (x-y)相同,即大括号是数学/算术表达式的一部分。由于同样的原因,如果您查看下面的答案,它们只是用()将函数包围起来以使其正常工作 - 这将声明函数更改为函数表达式 - slebetman
注意:在任何编程语言中,表达式是指不是函数但返回值的东西。在函数表达式中,强制将函数创建在表达式内部使其返回一个值——指向定义的函数的指针。因此,您可以使用该值——在这种情况下称之为调用它。 - slebetman
1
答案是 (),当其未用作函数调用时,就仅仅是一个分组运算符。为了使它成为有效的表达式,至少需要在其中放入一个有效的表达式。这就是为什么当它为空时会出现错误。在您的情况下,1 是一个有效的表达式。如果它们被逗号分隔开,也可以有多个表达式。(1, "foo", some.func("xyz"))。或者你可以使用它们来覆盖操作符优先级。(2 + 3) * 42 + 3 * 4 不同。 - user1106925
...所以你是对的。解析器将其视为两个独立的语句,而不是立即调用的函数。 - user1106925
谢谢slebetman和squint。你们的回答正是我想要的。顺便问一下,我怎么关闭这个问题并将你的答案设置为正确答案? - CunruiLi
2个回答

3
这是一个立即调用的函数表达式(IIFE):
(function foo(){
    console.log(1);
})();  // call the function here

解释:
假设你创建了一个函数:
function foo(){
        console.log(1);
}

现在我们调用这个函数的方法是:
foo()

现在,如果您看到了,我们刚刚给出了函数名称并调用了它。现在,我们可以在同一行中调用它,例如:
(function foo(){
            console.log(1);
})();

这是一篇你可以阅读的文章

这并没有真正回答问题。他在问 (1) 单独代表什么意思。 - user1106925
实际上,OP拥有的不是一个立即调用的函数表达式,因为他们缺少一些括号来使其成为表达式。OP的代码会导致语法错误。 - jfriend00
@squint:我已经更新了答案,我认为现在它完全回答了OP的问题。很抱歉之前漏掉了这个。如果还有什么遗漏,请告诉我。 - Ajay Narain Mathur
抱歉,但您的更新不正确(或令人困惑)。在这两种情况下都是函数声明。OP在问题中正确地确定了这一点。因此,他看到的是一个带有单独的()的函数声明,在另一个函数声明后面有一个单独的(1)语句。所以他问为什么()本身无效而(1)本身有效,并且括号在JS中实际上意味着什么。 - user1106925

2
(function(){
   //code goes here
 })();

这是您想要的。

将数字1放在这里只是将1作为参数传递给立即函数。如果在传递数字1时在函数内部执行console.dir(arguments),它会打印出您传入的数字。

(function(){
   var args = Array.prototype.slice.call(arguments);
    console.dir(args); // prints [1][
 })(1);

换句话说,您需要创建函数,然后立即调用它。使用()。

这并没有真正回答问题。他在问 (1) 单独代表什么意思。 - user1106925

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接