我正在使用一个名为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数组的无限循环。