ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

Javascript:関数リテラル

Javaとは違い、Javascriptでは関数もオブジェクトである。そのメモ。

  • 関数を定義する
document.writeln(show("test")); //エラーになりそうでならない
function show(string){
   return string + ":" +string;
}
document.writeln(show("test")); //エラーにならない

この"function show(){}"は、どこから呼び出されてもエラーにならない。宣言の前でも宣言のあとでも。

  • 変数に関数を格納する
document.writeln(show("test")); //エラーになる
var show = function(string){
   return string + ":" +string;
}
document.writeln(show("test")); //エラーにならない

変数に関数を格納した場合の呼び出しは、変数宣言の前に呼びだそうとするとエラーになる。変数に関数を入れても同じように使える。変数に関数を入れることができるようになると使い方が広がる。

function show(string){
   return string + ":" + string;
}
var arrayObject = new Object();
arrayObject["func1"] = show;
arrayObject["func2"] = function(string){
    return string + ":" + string + ":" + string;
};

for(var i = 1 ; i <= 2 ; ++i){
     document.writeln(arrayObject["func" + i]("test") + "<br>");
}
実行結果
test:test
test:test:test

このように連想配列に関数を入れて処理をすることも可能となる。

var arrayObject = {
    func1:show,
    func2:function(string){
          return string + ":" + string + ":" + string;
    }
}

一つ前のは、"var arrayObject = new Object();" を行ったが、初期化時に連想配列に関数を格納することも可能。実行結果は変わらない。