1.簡述同步和異步的區別


  • 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
    來源:簡書
    著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM