我是一名新的程序员,擅长通过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"]
谢谢
答案 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);