var op = {
"+": function(a, b){return a + b;},
"==": function(a, b){return a == b;},
"===": function(a, b){return a === b;},
"!": function(a){return !a;}
/* and so on */
};function partial(func) {
var knownArgs = arguments;
return function() {
var realArgs = [];
for (var i = 1; i < knownArgs.length; i++)
realArgs.push(knownArgs[i]);
for (var i = 0; i < arguments.length; i++)
realArgs.push(arguments[i]);
return func.apply(null, realArgs);
};
}printArray(map(partial(op["=="], 10), [0, 2, 4, 6, 8, 10]));其中map是实现10和后面数组[0, 2, 4, 6, 8, 10]的比较,让后返回[false,false,false,false,false,true].
麻烦给我说明一下,为什么(partial(op["=="], 10)中,10是如何传递进入函数op["=="]中。我知道问题在于func.apply()的用法,但还是未弄懂?
"+": function(a, b){return a + b;},
"==": function(a, b){return a == b;},
"===": function(a, b){return a === b;},
"!": function(a){return !a;}
/* and so on */
};function partial(func) {
var knownArgs = arguments;
return function() {
var realArgs = [];
for (var i = 1; i < knownArgs.length; i++)
realArgs.push(knownArgs[i]);
for (var i = 0; i < arguments.length; i++)
realArgs.push(arguments[i]);
return func.apply(null, realArgs);
};
}printArray(map(partial(op["=="], 10), [0, 2, 4, 6, 8, 10]));其中map是实现10和后面数组[0, 2, 4, 6, 8, 10]的比较,让后返回[false,false,false,false,false,true].
麻烦给我说明一下,为什么(partial(op["=="], 10)中,10是如何传递进入函数op["=="]中。我知道问题在于func.apply()的用法,但还是未弄懂?
for(var i=0;i<array.length;i++)
func(array[i]);
}function map(func,array){
var result=[];
forEach(array,function(element){
result.push(func(element));
});
return result;
} 以上为map 以及forEach 函数
var knownArgs = arguments;楼主看到上面的代码了吗,arguments就是获取当前方法实际传入的参数的.虽然partial方法声明时只写了一个参数,但是用arguments可以获取到实际传入时的参数.
我觉你可以理解为apply是将realArgs传入到func,作为func方法的参数来使用.相当于灵魂附体.