khellang/iffe.md

IIFEの戻り値を気にしない場合、以下のいずれかになります。

!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN

これをもう少し探ってみましょう。

セミコロンがない場合、括弧の各セットは直前の式を直ちに呼び出そうとします。 これは、直前の IIFE の戻り値になります。

つまり、違いは TypeError が発生するときです。 引数がどうなっているか調べてみましょう。 console.log() は undefined を返すことに注意してください。

さて、同じ例を crockford 方式でやってみましょう。

でも待ってください、ここには TypeError がありません…

返された関数のため TypeError はありません。 このことを理解した上で、TypeError が発生した元の例に戻りましょう。

結論

(function{})();(function(){}()); IIFE は、セミコロンがない状況で異なる動作をすることがあります。

モジュールで作業する場合、linter やツールを使用して、モジュールの末尾のセミコロンが欠けていないことを確認します。

さらに安全にするために、IIFE に先頭のセミコロンを追加します。

コメントを残す

メールアドレスが公開されることはありません。