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;});