昼間のメモ

お仕事をしているときに、あっ!と思いついたことはすぐに忘れてしまいますので、とにかく残すためのメモです。

匿名関数の定義と実行

2007-08-06 10:10:19 | Weblog

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つの変数はこの匿名関数の中でしか使えません。

従って、極力グローバル変数を使わない(=他のライブラリと衝突しない)ことが目的なんでしょうか。

 

ジャンル:
ウェブログ
キーワード
グローバル変数 関数へのポインタ
コメント (0) |  トラックバック (0) |  この記事についてブログを書く
Messenger この記事をはてなブックマークに追加 mixiチェック シェア
« JavaからJavaScri... | トップ | JavaScriptの変数... »

コメント

コメントはありません。

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。
※文字化け等の原因になりますので、顔文字の利用はお控えください。
下記数字4桁を入力し、投稿ボタンを押してください。この数字を読み取っていただくことで自動化されたプログラムによる投稿でないことを確認させていただいております。
数字4桁

トラックバック

この記事のトラックバック  Ping-URL

あわせて読む