ITエンジニアのブログ

IT企業でエンジニアやってる人間の日常について

JavaScript の関数での間違い

先日書いていた Node.js で動作させる JavaScript のプログラムを実行したところ、何故かエラーで動かなかったので色々と調べてみました。
原因は function 式にセミコロンを付与していなかったことなんですが、結構わかりづらいバグで苦戦しました。

動作環境

nodejs -v
v0.10.25

プログラム(簡略)

var connection = function(){
    console.log(1);
    /*
    ネットワーク接続の処理
    ...
    */
}

(function(){
    console.log(2);
})();

実行例

nodejs server.js
1
接続処理のエラー

console.log(3); を2つの関数の間に挟み込んだり、 function 式を function 文にすると何故か動作する。
原因が分からなかったので簡単なプログラムを作りました。

プログラム

var a = function(){
    console.log(1);
}

(function(){
    console.log(2);
})();

実行例

nodejs a.js
1
})();
  ^
TypeError: undefined is not a function

この後結局セミコロン忘れが原因だと直感で分かって解決したのですが、 function 式はセミコロンが必要な事をすっかり忘れていたことに気づきました。
それにしても、セミコロン推論はしてくれないんですね。