在static
函数中,我无法弄清楚listTodos()
循环的i
占位符参数如何/为什么吐出数组的索引号。对我来说,似乎占位符/参数都会做同样的事情,因为我无法弄清楚他们是如何指定彼此之间的任何不同。
所以下面,我不明白为什么控制台不会记录:todos.forEach
,而不是:"Buy New Turtle: Buy New Turtle"
。
"0: Buy New Turtle"

这是整个" Todo List" JS代码:
todos.forEach(function(todo, i) {
console.log(i + ": " + todo);

所以...我在这里有意义吗?有人可以为我清除这个吗?谢谢!
答案 0 :(得分:3)
您将函数作为参数传递给forEach
。然后forEach
在循环中迭代你的数组,并调用该函数,将某些参数传递给该函数。传递的参数总是......
为了更清楚地理解这一点,请实现自己的功能迭代器:
Array.prototype.mySuperForEach = function(callback) {
for (var i = 0; i < this.length; i++) {
callback(this[i], i, this) // <---This is your function being invoked
}
};
["foo", "bar", "baz"].mySuperForEach(function(item, i, arr) {
console.log("%s: %d of %d", item, i, arr.length)
})
&#13;
这不是.forEach()
的完全一致的实现,但它提供了一个基本的概念,即发生了什么。请注意,在for
循环内部,将调用回调并传递您在原始示例中观察到的参数。
请注意,虽然我延长了Array.prototype
,但如果完全了解其后果,则不应该这样做。