小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
发现JS中的循环有好多,如果让一下说出来,感觉有些会想不起来,本次花时间来梳理一下JS中循环语句。
本系列相关文章:
本文是本系列第二篇,关于for in和forEach循环
for in循环
for in循环大多数情况是用于遍历对象,但是也能遍历数组,由于比较常用,所以也纳入进来
for (let i in arr) {
console.log(arr[i]);
}
值得注意的是,for in枚举数组是key,后面会讲for of可以直接枚举到数组的value
forEach循环
arr.forEach(function(val, index, arr){
console.log(val, index, arr);
});
forEach其实就是用于代替普通for循环的,但是用起来比for循环更方便。可以接收两个参数:第一个参数表示每次循环执行的回调函数;第二个参数表示this指向问题。其中回调函数接受三个参数,分别表示与循环圈数对应的value值、数组下标index以及原数组arr
需要注意的是,如果回调函数是箭头函数,那么通过第二个参数修改this执行时不能修改成功的。因为箭头函数this默认是执行外围非箭头函数执行的this,call和apply以及bind是不能修改的。
let arr = [1,2,3,4];
const obj = {name:"alice"}
arr.forEach((val,index,array)=>{
console.log(this,val,index,array);
//箭头函数不能通过第二个参数来修改其里头的this指向
},obj);
了解了基本使用,下面来模拟实现_forEach:
Array.prototype._forEach = function (fn, thisTo) {
for (let i = 0; i < this.length; i++) {
fn.call(thisTo,this[i], i, this);
}
}
//test code
let arr = [1,2,3,4];
const obj = {name:"alice"}
arr._forEach(function(val,index,array){
console.log(this,val,index,array);//正常函数可以通过call来修改this指向
},obj);
arr._forEach((val,index,array)=>{
console.log(this,val,index,array);//箭头函数不能通过第二个参数来修改其里头的this指向
},obj);
实现成功
结束
以上就是两个循环的相关内容