我正在做一个练习,将人们从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
的值。
您为其分配一个值。然后,您修改该值的对象。然后,您将该对象的属性值复制到其他位置。然后,您将不必关心该对象,直到在下一个循环中为它提供了一组新的值(此时,您只关心该新值)即可。