單線程模式
之所以采用單線程,而不是多線程,跟歷史有關系。原因是不想讓瀏覽器變得太復雜,因為多線程需要共享資源、且有可能修改彼此的運行結果,對于一種網頁腳本語言來說,太復雜了。
好處
實現起來比較簡單,執行環境相對單純
壞處
1、 只有一個任務耗時很長,后面的任務都必須排隊等著,會拖延整個程序的執行。
2、 常見的瀏覽器無響應—假死,往往就是因為某一段js代碼長時間運行—比如死循環,導致整個頁面卡在這個地方,其他任務無法執行。
同步任務
定義:沒有被引擎難掛起、在主線程上執行的任務。
前一個任務完成,才能執行下一個任務
通俗:是按照他們在代碼中出現的順序一次執行任務
異步任務
定義:被引擎放在一邊,不進入主線程、而進入任務隊列的任務。
只有引擎任務某個異步任務可以執行了,該任務才會進入主線程執行。
通俗:在當前任務不被阻塞的情況下執行任務
操作流程:串行執行 / 并行執行
任務隊列
定義:用來存放異步任務的隊列。
包括:定時器回調、事件處理函數、Promise的異步操作等
事件循環
定義:是一種程序結構,用于處理任務隊列中的任務。js運行時(瀏覽器)中存在一個主線程,事件循環負責不斷的檢查任務隊列,如果任務隊列中有任務,就將任務取出并執行。
setTimeout()
定義:指定某個函數或某段代碼,在多少浩淼之后執行。
參數: setTimeout(callback, delay, param1, param2, …);
返回: 一個整數,表示定時器的編號,以后可以用來取消這個定時器。
setInterval()
定義: 指定某個任務每隔一段時間就執行一次,也就是無限次的定時執行