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()的用法,但还是未弄懂?

解决方案 »

  1.   

    map()看看这个方法怎么实现的
      

  2.   

    function forEach(array,func){
    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 函数
      

  3.   


    var knownArgs = arguments;楼主看到上面的代码了吗,arguments就是获取当前方法实际传入的参数的.虽然partial方法声明时只写了一个参数,但是用arguments可以获取到实际传入时的参数.
      

  4.   

    谢谢你,原来arguments 是有特殊含义,不能随便换为其他的。稍稍了解了些。你能再帮忙解释接下来的代码吗?
      

  5.   

    谢谢你,原来arguments 是有特殊含义,不能随便换为其他的。稍稍了解了些。你能再帮忙解释接下来的代码吗?
      

  6.   

    下面的代码主要就是func.apply(null, realArgs);这句话了.就想你说的那样,主要就是这个方法的问题.
    我觉你可以理解为apply是将realArgs传入到func,作为func方法的参数来使用.相当于灵魂附体.