简介
作为数组对象中最常用的方法之一, 我们不仅要会用, 也要知道它内部是如何实现的. 只有掌握了它的实现, 才能更好的理解. 我最近面试了不少候选人, 在js基础部分, 我一般也会问问这种题目. 能够完整的手写出来的候选人, 占比不大. 我们在修炼“百家武学”的同时,更要注重“内功”的练习.
重写数组的forEach方法.
这个方法的用法, 大家都应该很熟悉. 常见的用法如下:
arr.forEach((item, index) => {
// 第二个参数时可以省略的.
// to do something
})
事实上forEach的cb里, 是可以接受3个参数的, 我们测试一下:
const list = [
{name: 'Jack'},
{name: 'Joe'}
];
list.forEach((...args) => {
console.log(args);
});
运行后的截图如下:

这3个参数分别是:
- 元素的值
- 元素的索引
- 正在遍历的集合对象
了解它的完整用法之后, 再手写一个forEach就不会很难了.
Array.prototype.forEach = function(cb) {
const len = this.length;
for(let i=0; i<len; i++){
cb(this[i], i, this);
}
};
在Array的prototype下添加一个forEach方法, 方法的实现是通过for来做遍历.