forEach中的变量范围

时间:2017-04-28 19:08:49

标签: javascript

我正在进行一项练习,将人们从ancestry,一系列记录对象中分类到他们所居住的几个世纪以及他们的死亡年龄。

这是最终的代码,按预期工作:

ancestry.forEach(function(person) {
  // this works with ages inside or outside forEach **
  var ages = {};
  var century = Math.ceil(person.died / 100);

  if (century in ages) 
    ages[century].push(person.died - person.born);
  else
    ages[century] = [person.died - person.born];
});

基本上它只是计算一个人所属的世纪,并在数组中创建一个这样的键值对与死亡年龄:

{
16: [24, 51, 16]
17: [73, 22]
18: [54, 65, 28]
}

我不明白为什么可以在forEach的内部和外部声明var ages = {};,结果是一样的?每次在function(person)内调用时,ages都不应该创建新的forEach吗?

1 个答案:

答案 0 :(得分:1)

您只在函数内使用ages的值。

您可以为其指定值。然后,您修改该值的对象。然后,您可以在其他位置复制该对象的属性值。然后你永远不会关心那个对象,直到你在下一个循环中给它一组新的值(此时你只关心新的值)。