引数に渡した複数の関数を後ろから実行して、結果を次に渡して実行。複数の関数を全部実行した結果を返す。
■使用例
var greet = function(name){
return "hi: " + name;
};
var exclaim = function(statement){
return statement.toUpperCase() + "!";
};
var welcome = _.compose( greet, exclaim );
// "hi: MOE!"
console.log( welcome("moe") );
■内部構造
_.compose = function() {
// 引数全部
var args = arguments;
// 引数の数 - 1
var start = args.length - 1;
// _.compose自体は関数を返す。
return function() {
var i = start;
// this.args[start]( 返される関数のarguments );(ブラウザなら window = this )
var result = args[start].apply(this, arguments);
// 引数がなくなるまでの whileループ処理。グローバルオブジェクトをthisにして前の関数の結果を引数に関数処理を繰り返す。
while (i--) result = args[i].call(this, result);
return result;
};
};