JavaScriptの関数はデータとしても使える
例1
function add(x,y){return x+y;} function sub(x,y){return x-y;} //上記関数のいずれか1つを呼び出す関数 function operate(operator, operand1, operand2){ return operator(operand1, operand2); } //関数operateで(2+5)+(5-1)を計算 var i = operate(add, operate(add, 2, 5), operate(sub, 5, 1));
例2
//関数をオブジェクト(連想配列)に格納 var operators = { add: function(x,y){return x+y;}, sub: function(x,y){return x-y;}, pow: Math.pow//既存の関数も利用できる }; //上記のoperatorsからop_nameで指定した演算関数を探し、 //その演算関数でoperand1, operand2を演算する関数 function operate2(op_name, operand1, operand2){ if(typeof operators[op_name] == "function") return operators[op_name](operand1, operand2); else throw "unknown operator"; } //"Hello"+" "+"world" var j = operate2("add", "Hello", operate2("add", " ", "world")); //10の3乗 var k = operate2("pow", 10, 3);
関数がデータとして扱えるとArray.sort()のようなことができる
関数を引数として渡すことで、ソート方法を指定することができる。
var data = [33, 4, 1111, 222]; //そのままソートするとアルファベット順になるが:1111, 222, 33, 4 data.sort(); //比較関数を引数として渡せば数の小さい順になる:4, 33, 222, 1111 data.sort(function(a,b){return a-b;});