我正在做一个练习,将人们从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]
}


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

最佳答案

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

您为其分配一个值。然后,您修改该值的对象。然后,您将该对象的属性值复制到其他位置。然后,您将不必关心该对象,直到在下一个循环中为它提供了一组新的值(此时,您只关心该新值)即可。

09-30 17:30