javascript for循环意外结果

时间:2014-06-23 17:36:00

标签: javascript for-loop map partial higher-order-functions

我正在使用一个名为partial的函数,它根据你给它的参数创建另一个函数。但是由于某种原因,如果我在函数内部调用这样的for循环而不使用var,我会得到意想不到的结果。 for(i=1; i<knownArgs.length; i++)然而,当我使用var调用for循环时for (var i = 1; i < knownArgs.length; i++)我得到了我期望的结果。以下是我正在使用的功能和我期望的结果。

var op = {
    "+": function(a, b){return a+b;},
    "==": function(a, b){return a == b;},
    "===":function(a, b){return a === b;},
    "!":function(a){return !a;}
};

function map(func, array){
    var result = [];
    forEach(array, function(element){
        result.push(func(element));
    });
    return result;
}
function forEach(array, action){
    for(i=0; i<array.length; i++){
        action(array[i]);
    }
}


function partial(func) {
  var knownArgs = arguments;
  return function() {
    var realArgs = [];
    for(i=1; i<knownArgs.length; i++){
      realArgs.push(knownArgs[i]);
    }
    for(i=0; i<arguments.length; i++){
      realArgs.push(arguments[i]);
    }
    return func.apply(null, realArgs);
  };
}


console.log(map(partial(op["+"], 1), [0,2,4,6,8,10]));

当我在最后进行调用时,我期待一个数组[1,3,5,7,9,11],并且当在partial()函数内部的两个for循环内部时,我确实得到了var i = #。但是我之前从未使用过var,有人可以向我解释为什么当我不使用它时,我会得到一个返回3和4数组的无限循环。

0 个答案:

没有答案