js异同步

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);
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容