具有第二个参数的重复功能?

时间:2019-03-02 13:32:41

标签: javascript repeat

我是一名新的程序员,擅长通过Eloquent Javascript。这是我的第一篇文章。我不明白下面的“ i”如何传递给重复函数。我做了一个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"]

谢谢

2 个答案:

答案 0 :(得分:0)

根据结果,我认为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)。

我希望它能对您有所帮助:)

答案 1 :(得分:0)

您刚刚在这里考虑了整个功能的第二部分。可以理解,在“ Eloquent JavaScript”一书中,作者将整个函数编写为下面介绍的两个单独的函数。第一部分设置为i = 0,因此我将从零(0)开始。在第二部分中,我的意思是重复函数n = 5。因此,如for循环中所述,我将是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);