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
and asArray
,但partial
让我感到困惑。上面的调用返回
[[100, 10000], [144, 256], [0, 1]]
但我不明白怎么做。以下是我的问题:
1)在partial
定义arguments
中,第一行的arguments
变量和最后一行的变量是一样的吗?如果不是,每个参数对象的来源是什么?
2)当函数调用发生在上面最后的代码行时,我的理解是fixedArgs
绑定到[square]
(即包含square函数的数组)。然后concat
用二维数组调用它。这些绑定产生了许多问题,而不是正确的答案,因此它们不可能是正确的。调用时部分绑定的变量如何?