在JavaScript中,同步的意思是前一個任務(wù)結(jié)束后再執(zhí)行后一個任務(wù),程序執(zhí)行順序與任務(wù)的排列順序是一致同步的,JS語言的一大特點是單線程,同一時間只能做一件事,意味著一件事結(jié)束以后才能進行下一件事。
本教程操作環(huán)境:windows10系統(tǒng)、javascript1.8.5版、Dell G3電腦。
javascript同步是什么意思
S語言的一大特點是單線程,同一時間只能做一件事。意味著一件事結(jié)束以后 才能進行下一件事。
HTML5提出Web Worker標準,允許JavaScript腳本創(chuàng)建多個線程。于是有了同步和異步。
同步:
前一個任務(wù)結(jié)束后再執(zhí)行后一個任務(wù),程序執(zhí)行順序與任務(wù)的排列順序是一致的、同步的。
異步:
在做一件事的同時可以處理其他事件。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>同步和異步</title> </head> <body> <script> console.log('第一條語句'); setTimeout(function(){ console.log('第二條語句'); },5000) console.log('第三條語句'); </script> </body> </html>
輸出結(jié)果時,先顯示第一條語句,再顯示第三條語句,等待5秒后顯示第二條語句。
同步和異步的區(qū)別是在流水線上各個流程的執(zhí)行順序不同
當定時器的時間為0的時候,會是什么樣的打印順序呢?將上面程序的定時器時間更改為0,執(zhí)行程序,發(fā)現(xiàn)輸出順序并沒有改變。
JS將所有的任務(wù)分為兩大類,同步任務(wù)和異步任務(wù)
同步任務(wù)放在主線程上執(zhí)行,形成了一個執(zhí)行棧;異步都是通過回調(diào)函數(shù)實現(xiàn)的。
常見的異步任務(wù)有三類:
普通事件:如click、resize等。
資源加載,如load、error等。
定時器,包括setInterval、setTimeout等。
先執(zhí)行執(zhí)行棧中的同步任務(wù),異步任務(wù)放入任務(wù)隊列中,一旦執(zhí)行棧中的多有同步任務(wù)執(zhí)行完畢,系統(tǒng)就會按次序讀取任務(wù)隊列中的異步任務(wù),于是被讀取的異步任務(wù)結(jié)束等待狀態(tài),進入執(zhí)行棧。