即時関数
即時関数は、使い方と理解は簡単です。「関数を作成した直後に実行される関数」です。以上。
。。。
ですが問題は、その「使いどころ」です。即時関数自体は知っていても、「いつ使うのか」、「なんのために使うのか」 を知らなければその真価を発揮させることはできません。
即時関数は、 「一回だけしか必要ない処理」 をするために使われます。具体的には
- ページが読み込まれたときの初期化処理
- オブジェクトの生成
- DOM要素へのイベントハンドラの設定
などです。これらの処理は一回しか実行されないので、再利用可能な名前付き関数を作る理由は全くありません。むしろそうしてしまうと、グローバルスコープを汚染してしまいます。そう、即時関数とは、 「一回だけ必要な処理を、グローバルスコープを汚染せずに実行する方法」 なのです。
具体的には、ブックマークレットなどでよく使われます。仕事を効率化させるような便利なブックマークレットが多いので、以下のリンクを参考にしてください。
以下が代表的な即時関数です。
(function() {
//...
}());
ちなみに、即時関数は以下の書き方もできますが、JSLintでは上記のやり方が推奨されています。
(function(){
//...
})();
基本的な使い方
即時関数に引数を渡す
以下のように即時関数に引数を渡すことができます。
(function(firstname, lastname){
console.log("Hello, " + firstname + lastname + "!");
}("David", "Brown"));
『JavaScriptパターン』の引用ですが、一般には、即時関数の引数にはグローバルオブジェクトを渡します。なぜならば、そうるすことによってwindow
を使わずに関数の内部からアクセスできるからとのこと。
(function (global) {
// globalを介してグローバルオブジェクトにアクセス
}(this));