js是单线程任务
一次只能执行一个任务,如果有多个任务,就需要排队。前面任务执行完,才会执行下一个任务。
排队等待就会阻塞,如果遇到死循环逻辑、页面就会出现“假死”。
为了解决这种问题,js语言将执行模式分为两种:同步(sync)和异步(async)
forEach
forEach本身是同步的,会按数组元素升序的顺序执行callback。
而callback中可以是异步任务。
同步例子:
[1,2,3,4].forEach((value) => {
console.log(value); // 这是一个大数值运算(非异步代码),需要几毫秒的时间
});
console.log('abc'); // 这些代码将会阻塞,等到forEach循环完之后执行
结果 image.png
[1, 2, 3,4].forEach((value) => {
setTimeout(function() {
console.log(value);
}, 1000);
});
console.log('abc'); // 这部分代码不会被setTimeout阻塞,forEach遍历完1,2,3,4之后就执行
结果 image.png
源码:
Array.prototype.forEach=function(callback){
for(let index=0;index<this.length;index+){
callback(this[index],index,this);
}
}
网友评论