萌えハッカーニュースリーダー

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

出典: https://benalman.com/news/2010/11/immediately-invoked-function-expression/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士、またですか...。おやつはちゃんと管理してくださいね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search