首页 > 解决方案 > For循环使用带有传递参数的函数调用的长度,什么属性提供长度值?

问题描述

我正在阅读 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) 的值。它会是函数的返回值吗?返回值是数组 events[]。这是否意味着长度值是事件[]的长度?

标签: javascriptarraysfor-loopobject

解决方案


答案是肯定的,长度值就是events数组的长度。然而,长度在这里并不是一个真正的直接因素。数组是可迭代的,因此您可以使用循环遍历它们for...of。您可以通过更改函数来轻松测试journalEvents它,使其返回一个数字,然后看看会发生什么:)


推荐阅读