JavaScriptのライブラリなんかを見ていると、↓のようなコードになっています。
(function(){//何かいろいろ
})();
この(function(){})();が何者なのかよく分からなかったのですが、ようやく意味が分かりました。
匿名関数
匿名関数とは、
var f = function() {//何かいろいろ
};
です。Javaの匿名クラスが分かれば似たようなものなので、↑の記述を見れば、変数fに関数自身が入っていることが分かるでしょう。
関数呼び出し
関数呼出しは2通りあり、
var r = func();と、
var r = (func)();のどちらでも呼べます。後者は変ですが、C言語の関数へのポインタを使った関数呼出しを知っていれば同じだと分かるでしょう。
匿名関数を変数に入れ、その変数の関数呼出し
匿名関数を変数fに入れ、その変数に入っている関数呼出しとして、2番目の呼び出し方法にします。
var f = function() {
//何かいろいろ
};
var r = (f)();
ここで、変数fを無くしてしまえば、
var r = (function() {//何かいろいろ
})();
さらに戻り値の変数rを無くせば、
(function() {//何かいろいろ
})();
となり、これは匿名関数の定義と実行を同時にやっていることになります。
何でこんな面倒なことをやっているのか
意味は分かったのですが、何でこんな記述をするのか理由が分からなかったのです。
つまり、実行結果は、
//何かいろいろと同じです。
ここで「何かいろいろ」で変数を3つ定義すると、その3つの変数はグローバル変数となります。
ところが、
(function() {var a = 1;
var b = 2;
var c = 3;
})();
とすると、3つの変数はこの匿名関数の中でしか使えません。
従って、極力グローバル変数を使わない(=他のライブラリと衝突しない)ことが目的なんでしょうか。









