関数の呼び出し技、その1


 関数の呼び出し技、その1です。通常関数を呼び出すには以下のようになります。とりあえず、ここでは呼び出される関数名をtestにしてあります。

function test(){ alert("ok") }
test()

 つまり関数名()とします。それじゃあ、この関数名を変数(オブジェクト)に代入して最後にカッコを付けたらどうなるのでしょうか。答えは、このページを読み込んだ時に結果が出ています。ちゃんと代入された関数名を探して呼び出してくれるのです。上記のtestを変数abcに代入して呼び出す場合は以下のようになります。

function test(){ alert("ok") }
a = test
a()

 ところで、これが何の役に立つのか?と言われそうですが、これが配列だった場合、今までif分やswicth分で分岐していた処理が簡単に行えるようになります。例えばバージョンによる分岐などは、

jp = new Array(ver0,ver1,ver2,ver3,ver4);
jp[navigator.appVersion.charAt(0)]();

 といった具合に記述する事ができるようになります。また、これはNetscape 2.0以降であれば動作しますので、互換性も高く有益に使う事ができます。




スクリプト

function func(msg){ alert(msg); }
a=func; // ここでaに関数名を代入します
a("No1"); // aの後ろに()を付加するとaに代入された関数を呼び出す事ができます