Array.prototype.foreach()
Array.prototype.foreach()
遍历,不会改变原数组,没有返回值
注意了,数组这些api里面都是回调函数!所以这个foreach你就别指望return能结束它
foreach()与map()方法极为相似,区别就是map()方法会返回一个新数组,而foreach()方法不返回任何东西
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
words.forEach(item => {
console.log(item);
});
- 手动实现(必须要掌握,不要让它成为曾经会写的东西)
Array.prototype.forEach = function(callback, thisArg) {
if(typeof callback != 'function') throw new TypeError(callback + 'must be a function')
let arr = this
let thisValue = arguments[1] || this
for(let i = 0; i < arr.length; i++) {
callback.call(thisValue, arr[i], i, arr)
console.log(111);
}
};
[1,2,3].forEach(item => {
console.log(item);
},100)
/*
* 判断第一个参数是否为函数
* arguments[1]的意思是否接收到了第二个参数,如果没有就用本来的this,就是你平常用数组系列方法时,除了传一个回调函数以外,还可以传一个可选参数,用作this的值。这里比较严谨,因为判断了是否有这个可选参数,挺牛的
* 如果有,则改变this的指向
* 我打印了一个111,结果还真输出了,就证明真的重写了这个foreach方法,牛
* 因为是数组去调用的foreach方法,所以this指向的是一个数组,自然就有arr[i]的用法,你也可以输出this,你会发现它就是[1,2,3]
* foreach它与fori最大的区别就是有回调函数,其实就是在fori中调用回调函数,这是它的实现思路,理解了这个,多半能自己完成了
* */
这一路,灯火通明