这是ASI的问题还是仅仅是返回语法?

时间:2011-03-08 12:03:51

标签: javascript

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>

2 个答案:

答案 0 :(得分:2)

我认为没有“插入”分号。只是那里有一个解析模糊,解决方案是将“返回”和下面的表达式视为两个单独的语句。我理解为什么它从纯粹的语法角度来看是有意义的,但是在“返回”语句的特定情况下它似乎是一个奇怪的决定,因为决定保证离开一个永不执行的孤儿表达语句悬在它后面。

我想知道这个技巧产生了多少个SO重复点?

edit 04 Apr 2014 - 从技术上讲,将语句拆分为两个语句的决定是,称为“分号插入”。实际上没有人看到插入的分号;它是解析器想象力的一个虚构:)无论你怎么称呼它都会产生相同的效果。

答案 1 :(得分:0)

规范中没有任何内容表明返回值必须与return语句位于同一行,它只是错误的分号插入。