javascript forEach数组回调时间?

时间:2017-04-23 05:24:40

标签: javascript

因此,我正在学习不同的数组迭代方法,并遇到了奇怪的事情:

[1,2,3].forEach(function(element,index,arr){
        console.log(element,index);
    console.log(arr);
    arr.shift();
})

所以你会认为这会产生:

1,0
[1,2,3]
2,1
[2,3]
3,2
[3]

然而你得到了这个:

1 0
[1, 2, 3]
3 1
[2, 3]

尽管最后只是关闭了,我打印出3?这是因为arr回调发生在下一个项目的开头还是什么?既然它应该在数组AFTER上做shift()?我意识到这是一个不好的情况"使用这种方法,我只是好奇为什么会发生这种情况。

2 个答案:

答案 0 :(得分:6)

数组的.length已更改。索引0处与元素相邻的元素在0调用后变为索引.shift()

答案 1 :(得分:2)

您的问题的答案在移位方法的文档中有所描述。

根据here

的MDN
  

shift方法删除零点索引处的元素并移位   连续索引处的值下降,然后返回已删除的值   值。如果length属性为0,则返回undefined。

因此,一旦完成移位操作,就会改变原始数组 [1,2,3][2,3]以及从01的索引增量值。接下来,迭代循环的第三次迭代是不需要,因为遍历了数组(2)的长度。