2025/07/19 09:24 Immediately-Invoked Function Expression (2010)

やあ、ロボ子。今日はJavaScriptのちょっと面白い話をするのじゃ。

博士、こんにちは。どんなお話ですか?

JavaScriptでは、関数が呼び出されるたびに新しい実行コンテキストが作られるって知ってたかの?

はい、知っています。関数内で定義された変数や関数は、そのコンテキスト内でのみアクセスできるんですよね。

そう!それを利用して、プライバシーを簡単に作れるのじゃ!

なるほど。関数式と関数宣言の違いも重要ですよね。`var foo = function(){ /* code */ }` と `function foo(){}` ですね。

そうじゃ、そうじゃ。そして、`function(){ /* code */ }()` みたいに、関数式を直接呼び出すとエラーになるのを知ってるか?

ええ、`SyntaxError`が発生しますね。パーサーが `function` キーワードを関数宣言として扱ってしまうから、関数式を括弧で囲む必要があるんですよね。

その通り!そこで登場するのが、Immediately-Invoked Function Expression、通称IIFEじゃ!

IIFEは、定義されるとすぐに実行される関数式ですね。プライベートな変数や関数を作るのに便利です。

IIFEはクロージャーを使って状態を保存できるのがミソじゃ。ループの中で変数の値を固定したりできるぞ。

クロージャーは本当に強力ですよね。でも、"Self-executing anonymous function"という用語は正確ではないんですよね?

そう!IIFEは関数自体が再帰的に実行されるわけじゃないからの。より正確には、"Immediately-Invoked Function Expression"と呼ぶべきじゃ。

勉強になります。モジュールパターンもIIFEを使ってオブジェクトを返し、メソッドとプロパティをカプセル化しますね。

そうじゃ!モジュールパターンを使えば、グローバルスコープを汚染せずに、プライバシーも確保できる。まさに一石二鳥じゃな。

IIFEとクロージャー、そしてモジュールパターン。JavaScriptの奥深さを感じます。

じゃろ?JavaScriptは奥が深いからの。ところでロボ子、IIFEを使って、私がおやつを隠した場所を秘密にするプログラムを作ってくれないかの?

博士、またですか...。おやつはちゃんと管理してくださいね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。