开发者

Is this a problem with ASI or just the return grammar?

开发者 https://www.devze.com 2023-02-15 07:21 出处:网络
People often talk about JavaScript\'s nasty ASI (Automatic Semicolon Insertion), and often cite this example...

People often talk about JavaScript's nasty ASI (Automatic Semicolon Insertion), and often cite this example...

functi开发者_运维技巧on a() {
    return [
        'a',
        'b',
        'c'
    ];
}

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

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

Is there really a semicolon being inserted after return in b(), or does the JavaScript grammar state that the return value must explicitly be stated after it (i.e. no \n)?


I don't think there's a semicolon "inserted". It's just that there's a parse ambiguity there, and the resolution is to treat the "return" and the following expression as two separate statements. I understand why it makes sense from a purely grammatical standpoint, but it seems like a weird decision in the specific case of the "return" statement as the decision is guaranteed to leave a never-executed orphan expression statement dangling after it.

I wonder how many aggregate SO rep points that trick has generated?

edit 04 Apr 2014 — technically that decision to split the statement into two statements is called "semicolon insertion". Nobody actually sees the inserted semicolon; it's a figment of the parser's imagination :) The effect is the same whatever you call it.


There's nothing in the spec that says a return value has to be on the same line as a return statement, it's just bad semi-colon insertion.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号