IIFEにおけるセミコロンの安全性

今度は、即時実行関数式の前にプラス記号ではなく、 丸括弧で囲む方法を見てみましょう。次のようになります:

javascript(function() {
  console.log(1); // 1を出力
})();

変数 num が関数の外部で定義されているとします:

javascriptlet num = 1; // セミコロンあり

(function() {
  console.log(num); // 1を出力
})();

ここで、セミコロンを付け忘れた場合を考えましょう:

javascriptlet num = 1

(function() {
  console.log(num); //!! エラーが発生
})();

このコードはエラーを引き起こします。 JavaScriptがこの関数を最初の行のコマンドの続きとして 解釈してしまうためです。

このような問題を避けるためには、即時関数の前に 常にセミコロンを置く必要があります。次のように:

javascriptlet num = 1

;(function() {
  console.log(num); // 1を出力
})();

この問題は少し大げさに思えるかもしれませんが、 実際はそうではありません。例えば、ページに複数の 別々のファイルからスクリプトを読み込む状況が考えられます。 この場合、あるファイルの末尾にセミコロンが抜けていて、 次のファイルが即時関数で始まると、自動的に問題が発生します。

したがって、今は問題がないと確信している場合でも、 即時関数の呼び出しの前には常にセミコロンを置くべきです。 問題は後になって発生する可能性があります。

上記を適用して、先頭にセミコロンを置いた即時関数を呼び出しましょう:

javascript;(function() {
  console.log(1); // 1を出力
})();
Задание 1

コードを実行せずに、コンソールに何が出力されるか判断してください:

javascriptlet str = 'str';

(function() {
  console.log(1);
})();
Задание 2

コードを実行せずに、コンソールに何が出力されるか判断してください:

javascriptlet str = 'str'

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