Javascript Arrays和.forEach循环参数

时间:2016-12-31 18:40:58

标签: javascript arrays foreach

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);




所以...我在这里有意义吗?有人可以为我清除这个吗?谢谢!

1 个答案:

答案 0 :(得分:3)

您将函数作为参数传递给forEach。然后forEach在循环中迭代你的数组,并调用该函数,将某些参数传递给该函数。传递的参数总是......

  1. 循环中的当前项目
  2. 循环的当前索引
  3. 原始阵列。
  4. 为了更清楚地理解这一点,请实现自己的功能迭代器:

    
    
    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;
    &#13;
    &#13;

    这不是.forEach()的完全一致的实现,但它提供了一个基本的概念,即发生了什么。请注意,在for循环内部,将调用回调并传递您在原始示例中观察到的参数。

    请注意,虽然我延长了Array.prototype,但如果完全了解其后果,则不应该这样做。