带第二个参数的重复函数?

Repeat Function w/ Second Argument?

我是一名新程序员,正在通过 Eloquent Javascript。这是我的第一个post。我不明白下面的 'i' 是如何传递到 repeat 函数中的。我做了一个console.log,看到它贯穿0-4。 'i'如何自动设置为0?然后加1?

let labels = [];

repeat(5, i => {
    labels.push(`Unit ${i + 1}`);
});

console.log(labels);
// → ["Unit 1", "Unit 2", "Unit 3", "Unit 4", "Unit 5"]

谢谢

根据结果,我假设 repeat 函数是:

function repeat (times, func) {
  for (var i = 0; i < times; ++ i) {
    func(i + 1);    // kindly note this line, as per your doubt
  }
}

所以,repeat 调用函数给定的次数,根据你的论点,这里是:

func = i => {
  labels.push(`Unit ${i + 1}`);
}

因此,func 这是您传递的函数,它从 0 循环到 4,并且 number + 1 作为参数传递给 func,因此它从 1 循环到 5。

根据你的问题,你可能不明白为什么它是从 1..5 而不是 0..4 开始循环的,这是因为行 func(i + 1);

另请注意,根据@MTK 评论:

i => {
  labels.push(`Unit ${i + 1}`);
}

function (i) {
  labels.push(`Unit ${i + 1}`);
}

是等价的,(不包括上下文绑定的概念,this)。

希望对您有所帮助:)

您刚刚在这里考虑了整个函数的第二部分。了解到在"Eloquent JavaScript"一书中,作者将整个函数写成了下面展示的两个独立的函数。第一部分,设置 i=0,因此 i 将从零 (0) 开始。在第二部分,我的意思是在 repeat 函数中,n=5。因此,如 for 循环中所写,i 将是 i<5。意思是我将从 0 增加到 4。 希望这能澄清让您感到困惑的一切。

function repeat(n, action) {
    for (let i = 0; i < n; i++) {
      action(i);
    }
  }

  let labels = [];
  repeat(5, i => {
    labels.push(`Unit ${i + 1}`);
  });
  console.log(labels);