js异同步

2020-03-27  本文已影响0人  hello_water
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);
    }

}
上一篇 下一篇

猜你喜欢

热点阅读