关于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日-从技术上讲,将语句分为两个语句的决定称为“分号插入”。实际上没有人看到插入的分号。这是解析器想象力的虚构内容:)无论您叫什么效果都一样。

09-25 18:16
查看更多