2011-03-08 120 views
4

People often talk关于JavaScript的讨厌ASI(自动分号插入),并经常引用this example ...这是ASI问题还是仅仅是返回语法?

function a() { 
    return [ 
     'a', 
     'b', 
     'c' 
    ]; 
} 

function b() { 
    return 
    [ 
     'a', 
     'b', 
     'c' 
    ]; 
} 

console.log(a(), b()); 
// ["a", "b", "c"] undefined 

真的是有在b()return后插入一个分号,或做JavaScript的语法状态返回的值必须明确说明后(即没有0​​)?

+1

你可以找到你的答案在下面的链接.. http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion –

回答

2

我不认为有一个分号“插入”。只是在那里存在解析歧义,解决方法是将“返回”和下列表达式视为两个单独的语句。我明白为什么从纯语法的角度来看它是有道理的,但它似乎是一个奇怪的决定,在特定的情况下的“返回”的声明,因为决定是保证留下一个永远不会执行的孤儿表达式语句悬而未决。

我想知道有多少总计的SO代表点技巧已经产生?

编辑2014年4月4日 —技术上这一决定的语句分成两条语句称为“插入分号”。没有人真的看到插入的分号;这是解析器的想象力:)不管你怎么称呼,效果都是一样的。

+0

你的回答是有意义的,但事实并非如此。布拉沃:) +1 – alex

+0

看看这里:http://inimino.org/~inimino/blog/javascript_semicolons简洁明了。 –

0

规范中没有什么说返回值必须与return语句在同一行上,这只是不好的分号插入。

+2

这个引号是否不说? *返回[没有LineTerminator here]表达式; *来自[ECMASpec](http://es5.github.io/x5.html)。 – alex

相关问题