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

JavaScriptの自己呼び出し関数とは?IIFE(即時実行関数式)の基本と使い方を解説


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

IIFEの基本的な構文

即時実行関数は、関数全体を丸括弧 () で囲み、その直後に続ける () によって即座に呼び出します。

(function () {
  // ここに処理を記述する
})();

また、ES6以降ではアロー関数を使えば、より簡潔に次のように書くこともできます。

(() => {
  // ここに処理を記述する
})();

サンプルコード

以下は、JavaScriptで自己呼び出し関数(IIFE)を使用した具体的なコード例です。ページが読み込まれると、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>

実行結果

上記のコードを実行すると、ブラウザには次のように表示されます。

JavaScriptの自己呼び出し関数とは?IIFE(即時実行関数式)の基本と使い方を解説


IIFEを使うメリット

  • グローバルスコープを汚染しない: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を固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン