Eloquent Javascript には、次のコード例が含まれています。
function map(func, array) {
var result = [];
forEach(array, function (element) {
result.push(func(element));
});
return result;
}
function asArray(quasiArray, start) {
var result = [];
for (var i = (start || 0); i < quasiArray.length; i++)
result.push(quasiArray[i]);
return result;
}
function partial(func) {
var fixedArgs = asArray(arguments, 1);
return function(){
return func.apply(null, fixedArgs.concat(asArray(arguments)));
};
}
function square(x) {return x * x;}
console.log(map(partial(map, square), [[10, 100], [12, 16], [0, 1]]));
map
とは理解できますasArray
が、partial
混乱します。上記の呼び出しは戻ります
[[100, 10000], [144, 256], [0, 1]]
しかし、私は方法を理解していません。ここに私の質問があります:
1)partial
定義において、最初の行の変数は最後の行arguments
の変数と同じですか? arguments
そうでない場合、これらの各引数オブジェクトのソースは何ですか?
2) 上記の最後のコード行で関数呼び出しが発生すると、私の理解では、それは(つまり、square 関数を含む配列) にfixedArgs
バインドされます。[square]
次にconcat
、2 次元配列で呼び出されます。正しい答えではない多くの問題がこれらのバインディングから発生するため、正しいものにはなりません。呼び出されたとき、部分的にバインドされた変数はどのようになっていますか?