JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScript即時呼び出し関数式(IIFE)とは?基本の使い方をわかりやすく解説

JavaScriptにおける即時呼び出し関数式(IIFE:Immediately Invoked Function Expression)とは、定義された直後に自動的に実行される関数のことです。通常の関数とは異なり、後から手動で呼び出す必要がないのが最大の特徴です。

IIFEの基本的な構文

IIFEは、無名関数を括弧 () で囲み、その直後に実行用の括弧 () を続けて記述します。

(function () {
  // ここに処理を書く
})();

サンプルコード

以下は、JavaScriptでIIFEを使用した具体的なコード例です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .sample {
        font-size: 18px;
        font-weight: 500;
    }
</style>
</head>
<body>
<h1>JavaScript 即時呼び出し関数式(IIFE)</h1>
<div class="sample"></div>
<script>
    let sampleEle = document.querySelector(".sample");
    (function () {
        sampleEle.innerHTML = "このコードは、定義されると同時にすぐに実行されます";
    })();
</script>
</body>
</html>

実行結果

上記のコードを実行すると、ページが読み込まれた時点でIIFE内の処理が自動的に実行され、.sample クラスを持つ要素にテキストが表示されます。

JavaScript即時呼び出し関数式(IIFE)とは?基本の使い方をわかりやすく解説

IIFEを使うメリット

  • グローバルスコープの汚染を防げる: IIFE内で宣言した変数や関数はローカルスコープに閉じ込められるため、他のコードとの名前の衝突を回避できます。
  • 初期化処理に最適: ページ読み込み時に一度だけ実行したい処理(イベントリスナーの設定、設定値の初期化など)をまとめて記述できます。
  • プライベートな変数を作れる: 外部からアクセスできない変数を定義できるため、モジュールパターンの基礎としても活用されてきました。

ES2015以降は letconst のブロックスコープが使えるようになりましたが、レガシーコードの理解やライブラリのソースを読むうえで、IIFEの仕組みは今も重要な知識です。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン