-
js是一門單線程語言,所謂"單線程",就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行后面一個任務,以此類推。如果一個任務耗時過長,那么后面的任務就必須一直等待下去,會拖延整個程序,常見瀏覽器無反應,可能就是一段代碼死循環,造成程序卡住在這個位置,無法繼續
為了解決這個問題,js的執行模式分為兩種:同步和異步。
"同步模式"就是上一段的模式,后一個任務等待前一個任務結束,然后再執行,程序的執行順序與任務的排列順序是一致的、同步的;"異步模式"則完全不同,每一個任務有一個或多個回調函數(callback),前一個任務結束后,不是執行后一個任務,而是執行回調函數,后一個任務則是不等前一個任務結束就執行,所以程序的執行順序與任務的排列順序是不一致的、異步的。具體來說,異步運行機制如下:
(1)所有同步任務都在主線程上執行,形成一個執行棧(execution context stack)。
(2)主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件。
(3)一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",看看里面有哪些事件。那些對應的異步任務,於是結束等待狀態,進入執行棧,開始執行。
(4)主線程不斷重復上面的第三步。"異步模式"編程的4種方法
1.回調函數
2.事件監聽,任務的執行不取決於代碼的順序,而取決於某個事件是否發生
3.發布訂閱模式,也叫觀察者模式
4.Promises對象最基礎的異步是setTimeout和setInterval函數,很常見,但是很少人有人知道其實這就是異步,因為它們可以控制js的執行順序
作者:A落兒
鏈接:https://www.jianshu.com/p/9e93a854d6a5
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。