关于JavaScript讨厌的ASI(自动分号插入)的People often talk,经常引用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
)? 最佳答案
我认为没有“插入”的分号。只是那里存在解析歧义,解决方案是将“return”和以下表达式视为两个单独的语句。我从纯语法的 Angular 理解为什么这样做是合理的,但是在“返回”语句的特定情况下,这似乎是一个怪异的决定,因为该决定肯定会留下未执行的孤儿表达语句。
我想知道这个诀窍产生了多少总的SO代表点?
编辑2014年4月4日-从技术上讲,将语句分为两个语句的决定称为“分号插入”。实际上没有人看到插入的分号。这是解析器想象力的虚构内容:)无论您叫什么效果都一样。