クロージャ

http://www.apple.com/aperture/のようなjavascript使ったかっこいいサイトに憧れ、最近サイ本でjavascriptの勉強を始めているわけですが、p349に勉強になったコードがあったのでメモを。



まず、make()という関数があるのですが、この関数は指定されたタグ名、属性、子要素を持つHTML要素を生成します。

シンタックスは、

make(tagname, attribute, children)

です。

これは次のように使います。

var table = make("table", {border:1}, make("tr", [make("th", "Name"),
                                                  make("th", "Type"),
                                                  make("th", "Value")]));

これだとテーブルをたくさん使う場合には、少し面倒です。
そこで本書では次のように、指定されたタグを使ってmake()を呼び出す関数を返すmaker()を定義しています。

function maker(tag){
	return function(attrs, kids){
		if(arguments.length == 1) return make(tag, attrs);
		else return make(tag, attrs, kids);
	}
}

これを使って、テーブル関係のタグを生成する関数を定義しておくことにより、

var table = maker("table"), tr = maker("tr"), th = maker("th");

次のように、テーブル作成処理を簡素化して書けます。

var mytable = table({border:1}, tr([th("Name"), th("Type"), th("Value")]));

maker()で上手くクロージャを使っています。なるほど!!