People often talk关于JavaScript令人讨厌的ASI(自动分号插入),并经常引用this example ......
function a() {
return [
'a',
'b',
'c'
];
}
function b() {
return
[
'a',
'b',
'c'
];
}
console.log(a(), b());
// ["a", "b", "c"] undefined
在return
b()
之后是否真的插入了分号,或者JavaScript语法是否规定必须在其后明确声明返回值(即没有\n
)?< / p>
答案 0 :(得分:2)
我认为没有“插入”分号。只是那里有一个解析模糊,解决方案是将“返回”和下面的表达式视为两个单独的语句。我理解为什么它从纯粹的语法角度来看是有意义的,但是在“返回”语句的特定情况下它似乎是一个奇怪的决定,因为决定保证离开一个永不执行的孤儿表达语句悬在它后面。
我想知道这个技巧产生了多少个SO重复点?
edit 04 Apr 2014 - 从技术上讲,将语句拆分为两个语句的决定是,称为“分号插入”。实际上没有人看到插入的分号;它是解析器想象力的一个虚构:)无论你怎么称呼它都会产生相同的效果。
答案 1 :(得分:0)
规范中没有任何内容表明返回值必须与return语句位于同一行,它只是错误的分号插入。