对于使用带有传递参数的函数调用长度的循环,什么属性提供长度值



我将学习Eloquent JavaScript的第4章,以防有人想了解到底发生了什么。https://eloquentjavascript.net/04_data.html.

我试图理解这个For循环从哪里获取它的长度值。

for (let event of journalEvents(JOURNAL)) {
console.log(event + ":", phi(tableFor(event, JOURNAL)));

正如我在本章前面所理解的,这个For循环也可以写成:

for (let i = 0; i < journalEvents(JOURNAL).length; i++) {
let event = journalEvents(JOURNAL)[i];
console.log(event + ":", phi(tableFor(event, JOURNAL))); 
} 

这意味着当传递参数JOURNAL时,可以在函数journalEvents((中的某个位置找到长度。

function journalEvents(journal) {
let events = [];
for (let entry of journal) {
for (let event of entry.events) {
if (!events.includes(event)) {
events.push(event);
}
}
}
return events;
}

在这一点上,我有点不知所措。我想我需要确定journalEvents(JOURNAL(的值。它会是函数的返回值吗?返回值为数组事件[]。这是否意味着长度值是事件的长度[]?

答案为yes,长度值为events数组的长度值。然而,在这里,长度并不是一个直接的因素。数组是可迭代的,因此可以使用for...of循环对它们进行迭代。您可以通过更改函数journalEvents使其返回一个数字来轻松地测试这一点,并查看会发生什么:(

函数journalEvents(journal)返回一个数组,该数组被添加到函数内部。基本上,这与将函数返回的数组放在journalEvents(journal):的任何位置相同
for (let event of [something]) {
console.log(event + ":", phi(tableFor(event, JOURNAL)));
}
请注意,for…of循环只会调用journalEvents(JOURNAL)一次,然后迭代结果值。如果你想把它重写成";正常的";循环,您应该为此引入一个临时变量:
const events = journalEvents(JOURNAL);
for (let i = 0; i < events.length; i++) {
const event = events[i];
console.log(event + ":", phi(tableFor(event, JOURNAL))); 
}

这是否意味着长度值是事件的长度[]?

是。

最新更新