JavaScript 單執行緒(Single Thread)
執行緒是針對於系統的執行。
單執行緒
無法同時執行多項任務,需要依順序一個一個完成。
多執行緒
可以同時執行多項任務
JavaScript 非同步概念(Async)
同步、非同步針對於程式語言本身。
同步
任務會是依次執行,不會突然跳掉下個任務。
非同步
JS的任務一樣是依據同步的概念執行。
非同步的部分不會先執行,會先移到事件佇列,等同步完成的任務都完成後,才會執行事件佇列。
事件佇列
執行時,執行fn1()>fn2()>fn3()-fn3-1()先放置於事件佇列>fn4()-同步任務結束後>fn3-1()。
事件佇列內的任務,會在最後面(同步任務完成後)才執行。
function fn1(){};
function fn2(){};
function fn3(){
fn3-1(){}; //非同步
};
function fn4(){};
//執行
fn1();
fn2();
fn3();
fn4();
練習題
for(var i=0; i<3; i++){
setTimeout(function(){
console.log(i);
},0);
}
解析
雖然說setTimeout設定是0秒即執行,但由於是非同步的,因此在同步任務完成前,會先放置到事件佇列,最後才執行。
for(var i=0; i<3; i++){ //會一直到 i === 3 ,跑完後才會執行setTimeout。
setTimeout(function(){
console.log(i);
},0);
} // 結果是 3