JS中同步和異步的一點我的理解

首先,咱們要知道,JavaScript的本質是一門瀏覽器腳本語言,在執行的時候是一行一行的執行,只有前面的代碼執行完了纔會執行後面的代碼。JS是單線程語言指的就是這個意思。程序員

對於同步任務和異步任務,打個比喻:編程

有一堆學生在食堂排隊打飯,而後進門的時候有些學生領了個異步的牌子,有些學生沒有領,而後在窗口前排隊打飯的時候,食堂大叔規定,有異步牌子的學生出來從新組成一個小隊列,在窗口旁邊等待,沒有牌子的學生仍然在窗口前的主隊裏排隊打飯。等主隊裏沒有牌子的學生排隊打完飯以後,食堂大叔示意小隊列裏有異步牌子的學生一個個的過來打飯。瀏覽器

拋開這個場景不談,在js中,同步和異步的概念,有不少博主的解釋就是「同步就是任務一個接一個的執行,前面的沒有執行完成後面的就一直等待」,「異步就是以爲一個任務要執行會花很長時間,因此先放着,去執行其餘的任務,等輪到這個任務的時候再執行。」異步

不少小夥伴看到這裏就懵逼了,怎麼着,系統還能識別哪一個任務執行時間長哪一個短?有這麼智能好用的系統?要是系統自動識別執行時長,任務管理不會亂套?因此,我我的以爲這些博主的描述是有很大問題的。函數

一個任務是不是異步的是看程序員在編寫代碼的時候是否將這個任務設置爲異步,而不是說時間長的任務就必定是異步的,只是一般來說爲了流暢性,編程者會將執行時間長的任務主觀的設置爲異步。spa

那麼這裏就涉及到一個問題了,怎麼將一個任務設置爲異步?線程

JS中最基礎的有兩種方式——setTimeout函數和setInterval函數。隊列

相關文章
相關標籤/搜索