DOMインターフェイス等を使ってXMLノードツリーのちょっとした検索をする場合に、無駄な変数の宣言を避け、その検索にのみ使用する変数を全て、その検索処理を行う関数の外部からは参照できない局所変数にし、さらにその関数自体も無名関数を使ってみようという試みです。
簡便化の為、XMLノードツリーは擬似的に単なる配列(Arrayオブジェクト)にして例示します。
var ary = [0, [1, 1, [2, 'it', [3,3]]]];
このような配列内において、唯一String型になっているアイテムを変数itに代入することを目的とします。更に、変数it以外は同じスコープから参照不可能になるように工夫します。
var it = function(_ary){
for(var i = 0, obj, len = _ary.length; i < len; i++)
{
obj = _ary[i];
switch(obj.constructor)
{
case String :
return obj;
break;
case Array :
return arguments.callee(obj);
break;
default :
break;
}
}
}(ary);
alert(it); // it
変数itに無名関数の戻り値を代入し、その無名関数の中で自分自身(arguments.callee)を呼び出して再帰処理を行っています。
この例における配列はノードリストに、また、配列のアイテムはノードに、そしてconstructorプロパティはnodeType等判別に使用したいプロパティ等に置き換えて使用します。その際にはもう少しややこしくなりますが、考え方は同じです。