Javascript如何解释此参数错误?

时间:2015-05-15 04:24:44

标签: javascript

function each(collection, callback) {
  if (Array.isArray(collection)) {
    for (var i = 0; i < collection.length; i++) {
      callback(collection[i]);
    }
  }
  else {
    for (var prop in collection) {
      callback(collection[prop], prop, collection);
    }
  }
}


var array = [1, 2, 3, 4, 5];


function reduce(collection, callback, initial) {
  var current = initial;
  each(collection, function(current, e) {
    current = callback(current, e);
  })
  return current;
}

console.log(reduce(array, function(a, b) { return a + b }, 0));  -->>> 0

我试图重写下划线each / reduce函数,并使用reduce中的每个函数。我知道我在那里有一个错误 - (当前不应该在每个回调函数中)它应该只是

each(collection, function(e) {
  current = callback(current, e);
})

并按原样返回15,但为什么当您在其中添加0作为参数时,它会返回current?它不应该只返回NaN吗?由于循环的最后一部分将尝试添加5和未定义的NaN

1 个答案:

答案 0 :(得分:3)

问题在于,只要将current添加到回调函数的参数列表中,就会有两个变量 - 具有相同的名称,但位于不同的范围内。回调中的一个阴影 reduce函数中的那个。

因此,使用callback传递给回调和each的元素调用undefined减速器,但将结果(NaN)分配给{{1}时它只会分配给current回调的本地变量。

外部each变量将完全不受影响,当从current返回时,它仍保留reduce值,并使用 - initial进行初始化。