用于循环意外结果的javascript

用于循环意外结果的javascript,javascript,for-loop,map,partial,higher-order-functions,Javascript,For Loop,Map,Partial,Higher Order Functions,我正在使用一个名为partial的函数,它根据您提供的参数创建另一个函数。然而,由于某种原因,如果在函数内部调用类似这样的for循环而不使用var.但是,即使它的全局值在第一个循环完成后i被设置回0,并且应该没有任何错误的原因,对吗?除非在循环中使用“i”的一个函数调用另一个使用相同变量的函数,否则它是有效的。 var op = { "+": function(a, b){return a+b;}, "==": function(a, b){return a == b;},

我正在使用一个名为partial的函数,它根据您提供的参数创建另一个函数。然而,由于某种原因,如果在函数内部调用类似这样的for循环而不使用var.但是,即使它的全局值在第一个循环完成后i被设置回0,并且应该没有任何错误的原因,对吗?除非在循环中使用“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]));