JavaScript でセミコロンを省略した場合の弊害

JavaScript でセミコロンを付けるべきか否かっていうは割と宗教的な違いがあると思います。
じゃあ、実際セミコロンをつけなかった場合にどういう弊害があるのか、というのを簡単に調べてみました。
その中で気になった記述をいくつかピックアップしてみます。

行頭が ( から始まる

JavaScript の場合、グローバル空間を汚染しないためによう以下のように (function(){}) で囲ってしまうというテクニックが使われます。

(function() {
    const a = 1;
    const b = 2;
    const c = 3;
})();

これ自体は特に問題はないんですが、次のように『この定義の前にセミコロンがない文を置く』とエラーになります。

// TypeError: 42 is not a function
const global = 42
(function() {
})();

これは JavaScript

const global = 42(function() {
})();

という風に解釈してしまうためです。

return 文

こちらは『セミコロンをつけなかった場合の挙動』っていうのとはちょっと違いますが、次のように return 文の後に改行すると意図しない動作になります。

function test(){
    return
        42;
}
test()  // => undefined

上記のコードはちょっと極端な例ですが、例えば {} を記述する際に改行するようなコーディングスタイルであれば注意する必要があります。

function test(){
    return
    {
        name: "homu"
    }
}
test()  // => undefined

所感

基本的にはセミコロンをつけなくても問題なさそうな気はする。
気はするけど思わぬところで嵌りそうな気もするのでセミコロンをつけておくのが無難そう。

参照