round brackets javascript
Possible Duplicate:
What do parentheses surrounding a JavaScript object/function/class declaration mean?
如下使用JS中圆括号的含义是什么:
1 2 3 | ( function foo(){ alert("Hello world!")}() ) |
它按预期工作,并显示"Hello world!"。 但是,如果我拉下括号
1 | function foo(){ alert("Hello world!")}() |
Chrome控制台会生成错误"Uncaught SyntaxError:Unexpected token"。
我无法弄清楚为什么会发生这种情况......有什么帮助吗?
1 2 3 | ( function foo(){ alert("Hello world!");} ) |
在上面的行中,我们定义了一个函数foo,它被解释为一个函数对象。
1 2 3 | ( function foo(){ alert("Hello world!");} )(); |
我们现在调用该函数(使用函数对象)。
注意:你使用paranthesis的方式实际上是错误的。以上是使用它们的正确方法。 strike>
更新:
这实际上是一个很好的问题。我把它弄乱了一段时间,得出以下结论。 (注意,我可能有点不对,请告诉我,如果是的话。)
它讲述了JS-engine解析代码的方式。当它解析
但是,以下代码有效
1 2 | <script type=text/javascript> [function foo(){ alert("Hello world!");}()] |
而且这个也是:
1 2 | <script type=text/javascript> 1,function foo(){ alert("Hello world!");}() |
(显然是上面问题中的一个)
我认为这是因为JS解析器需要一个
更新2(非常感谢Felix Kling为此):
请参阅CMS回复中有关语法部分的详细说明。这个答案非常清楚地解释了我上面所说的内容,即JS Parses如何区分函数声明和函数表达式
1 2 3 | ( function foo(){ alert("Hello world!")}() ) |
是一个函数表达式。因此它执行没有任何错误。
但在
1 | function foo(){ alert("Hello world!")}<<STOP>>() |
直到
这是一个自动执行的函数,这里有另一个问题:javascript中自执行函数的目的是什么?