我們都知道js是一個單線程的語言,所以沒辦法同時執行倆個進程。所以我們就會用到異步。
異步的形式有哪些那,es5的回調函數。es6的promis等
異步的運行原理我們可以先看下面這段代碼
應該很多人都知道這個打印的值是10個10.
也有知道當我們執行的for循環的時候,他會把for循環執行完成以后再去執行setTimeout,在執行setTimeout的時候這是時候的i已經變成了10所以就打印10個10。
但是這里面的執行過程是這樣的。我們用一個圖來做解釋
圖畫的有點丑啊,大致的執行流程就是這樣。
在js執行的時候,我們在主線程執行的好好的,然后遇到了一個回調函數,然后他會把這個回調函數異步處理,就是放到事假隊列中。
然后我們主線程接着去執行,當主線程執行完成以后,在去執行事件隊列里的函數。然后進行返回。
在事件隊列里,不存在從上到下進行執行。他會看那一個先執行完成,就直接返回那一個。
什么意思呢。我們看下面這個代碼
執行結果為1然后2
當js執行的時候。這倆個會放進事件隊列。js是從上往下執行。
所以他會先把1放入事件隊列中,然后在放入2.
這就可以看出在事件隊列中,誰先執行完成,就返會誰到主線程上。
這也是異步的一個執行過程