Vic*_*sto 2 javascript function
自从梦想成为一名优秀的JS开发人员以来,我正在阅读一些Javascript内容。我有点知道如何使用基础知识来满足我的PHP需求,但是仍然存在一些疑问。
我看到了一些例子,并得到了:
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);
Run Code Online (Sandbox Code Playgroud)
因此,如果需要,我可以使用它来重复一些基本功能。理解了,但是在另一种情况下,我可以使用相同的功能并使用不同的方法。
如果我想传递一个函数,为什么变量i变成计数器/迭代器?
我一直都在使用它,但仍然不知道它是如何工作的,因此在迫切需要时我无法使用它。
i
没有成为迭代器。在代码中,您使用的是es6速记符号来描述函数。i
是该函数的唯一参数。
i => {
labels.push(`Unit ${i + 1}`);
});
Run Code Online (Sandbox Code Playgroud)
是相同的
function(i){
labels.push(`Unit ${i + 1}`);
}
Run Code Online (Sandbox Code Playgroud)
请在本参考中以速记符号查看更多信息
编辑:要回答您的评论“添加了什么”,必须repeat(n, action)
更仔细地看一下该函数。i
在两种情况下使用它也可能会使您感到困惑,因此我将重写该功能以帮助您理解。此函数使用for循环从0迭代到n
for (let idx = 0; idx < n; idx++) {
action(idx);
}
Run Code Online (Sandbox Code Playgroud)
并使用当前的for循环索引调用该动作idx
。因此,以您为例:
Iteration 0: action(0) -> labels.push(`Unit ${0 + 1}`);
Iteration 1: action(1) -> labels.push(`Unit ${1 + 1}`);
Iteration 2: action(2) -> labels.push(`Unit ${2 + 1}`);
Iteration 3: action(3) -> labels.push(`Unit ${3 + 1}`);
Iteration 4: action(4) -> labels.push(`Unit ${4 + 1}`);
Run Code Online (Sandbox Code Playgroud)
请注意,repeat
of的声明i
在其函数体中是局部的,就像$ {i + 1}单元中的i
在它的函数体中局部的一样。这两个值在内存中没有引用相同的值,可以像我在解释中一样重命名i => { labels.push(
); }
i