1. 程式人生 > 其它 >微任務和巨集任務

微任務和巨集任務

微任務和巨集任務

1. js是單執行緒語言,因為js是做使用者互動;如果是多執行緒的話,那麼一個執行緒新增,一個執行緒刪除,就不知道執行哪一個了

2. js的執行流程:先同步==>後非同步(你不能確定它什麼時候執行的就是非同步)

非同步 : ajax請求 ,  事件類, 定時器, promise.then

3. 非同步又叫事件迴圈(event loop)又叫事件佇列 又分巨集任務和微任務

微任務:promise.then 、 promise.catch

巨集任務:script標籤、定時器(setTimeout/setInterval)、事件

巨集任務要執行,得先清空微任務

4. 例子:

for (var i = 0; i < 3 i++) {

setTimeout(function(){

console.log(i)

})

}

得到的是  3個 3

例子

<script type="text/javascript" src='a.js'></script>

setTimeout(function(){

console.log('定時器的aaa'); 巨集任務

})

Promise.resolve('foo').then(res=>{

console.log( res,'a.js的Promise' ); 微任務

})

console.log( 'aaa' ); 同步

<script type="text/javascript" src='b.js'></script> 巨集任務

console.log( 'bbbbb' ); 同步

setTimeout(function(){

console.log('定時器的bbbbb'); 巨集任務

})

Promise.resolve('foo').then(res=>{

console.log( res,'b.js的Promise' ); 微任務

})

第一種: 第二種:

console.log( 'aaa' ); console.log( 'aaa' );

console.log( res,'a.js的Promise' ); console.log( res,'a.js的Promise' );

console.log('定時器的aaa'); console.log( 'bbbbb' );

console.log( 'bbbbb' ); console.log( res,'b.js的Promise' );

console.log( res,'b.js的Promise' ); console.log('定時器的bbbbb');

console.log('定時器的bbbbb'); console.log('定時器的aaa');

第三種:

console.log( 'aaa' );

console.log( res,'a.js的Promise' );

console.log( 'bbbbb' );

console.log( res,'b.js的Promise' );

console.log('定時器的aaa');

console.log('定時器的bbbbb');