javascript - 圆括号javascript

标签 javascript function

<分区>

Possible Duplicate:
What do parentheses surrounding a JavaScript object/function/class declaration mean?

JS中圆括号的用法如下:

<script>
(
 function foo(){ alert("Hello world!")}()
)
</script>

它按预期工作并显示“Hello world!”。但是如果我拉下括号

 <script>

 function foo(){ alert("Hello world!")}()

</script>

Chrome 控制台生成错误“Uncaught SyntaxError: Unexpected token )”。 我不明白为什么会这样……有什么帮助吗?

最佳答案

(
 function foo(){ alert("Hello world!");}
)

在上面的行中,我们定义了一个函数 foo,它被解释为一个函数对象。

(
 function foo(){ alert("Hello world!");}
)();

我们现在正在调用函数(使用函数对象)。

注意:您使用括号的方式实际上是错误的。以上是正确的使用方法。

更新:

这其实是个好问题。我摆弄了一段时间并得出以下结论。 (注意,我可能错了很多,如果是这样请告诉我。)

它是关于 JS 引擎解析代码的方式。当它解析 function foo(){ alert("Hello world!");} 时,它将其视为函数声明。它(可能)不是调用函数的语句(可能根据语言的语法)。

然而,下面的代码有效

<script type=text/javascript>
[function foo(){ alert("Hello world!");}()]
</script>

还有这个:

<script type=text/javascript>
1,function foo(){ alert("Hello world!");}()
</script>

(显然是上面问题中的那个)

我假设这是因为 JS 解析器需要在 (..) 中有一个表达式即当它第一次看到 ( 时. comma-operator 也会发生这种情况如上面的第二个代码,以及初始化数组时(在第一个代码中)。但是当没有使代码(函数)看起来像表达式的标记时,解析会在遇到最后一个 () 时抛出错误。 .

更新 2(为此感谢 Felix Kling):

请引用语法部分的详细解释in CMS's response .这个答案非常清楚地解释了我上面所说的,即 JS Parses 如何区分 function-declarationfunction-expression

(
 function foo(){ alert("Hello world!")}()
)

是一个函数表达式。因此它执行时没有任何错误。

但是在

 function foo(){ alert("Hello world!")}<<STOP>>()

直到<<STOP>>的内容被解析为函数声明而不是函数表达式。因此,当它遇到第一个 (<<STOP>> 之后它会标记错误。

关于javascript - 圆括号javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869822/

相关文章:

list - 交替应用输入一元函数的 Haskell 函数

jquery - 常见补间/缓动函数的在线图表?

javascript - 在 express.js 中使用 anchor 标记渲染 View

php - 键入内容后,值会出现在文本框中

JavaScript HTML 加载两个脚本

c++ - 重载调用 *** <未解析的重载函数类型>)' 不明确

function - 是否有任何宏不能表示为函数?

function - 如何计算 Powershell 中用户的年龄

javascript - 使用 DOM 元素的 id 访问插件实例

javascript - Infinite Ajax Scroll v3 将随机数字查询参数添加到页面 URL