即時関数とは
JavaScriptにおいて、 下のような書き方を即時関数と呼ぶらしい。
(function(){ 処理 })();
この書き方してるライブラリは山のようにあるけど、 名前もわからん動作もわからん、そもそも何だこの気持ち悪い書き方は? 紹介してる書籍やサイトにも辿り付けないで苦労した。
挙動
関数の尻に()を付けるとその場で実行される。
function hoge() {
// 処理
}
hoge(); // 関数hogeが実行される
しかし、{}は開始と終了時に行が変わると解釈される。
// その場で関数を実行したい
function hoge() {
// 処理
}();
// ↓内部ではこのように解釈されるので関数hogeは動作しない><;
function hoge() {
// 処理
}
();
…で、function(){}
を式として認識させれば挙動を邪魔されることはない
(下記参考サイトを参照)
// 以下の書き方は全て同様
+function hoge(){ alert('hogeを実行') }()
-function hoge(){ alert('hogeを実行') }()
(function hoge(){ alert('hogeを実行') })()
しかし、+や-等を使うと戻り値が数値にキャストされてしまうので、 即時関数の書き方は下が一般的となる。
(function(){ 処理 })();
メリット
グローバル変数が汚れない
(function hoge(){ 処理 })();
alert(hoge); // underfindと表示される
参考サイト
三等兵「知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){…})()の全て」 http://d.hatena.ne.jp/sandai/20110824/p1
泥のように「即時関数(function(){ … })()の別の書き方いろいろ」 http://blog.tojiru.net/article/197270788.html
コメント
クロージャー絡みで発見した。 クロージャーも勉強しなければ…