理解js的同步操做與異步操做

字面誤區:一、js同步操做任務,並不是一塊兒操做之意;二、js異步操做任務,也並不是是指在不一樣線程裏作不一樣的事情。javascript

本質理解:首頁js的語言執行環境是單線程的,也就是一次只能完成一個任務,多個任務就必須按照時間前後排隊,前面完成後才能完成後一個任務。這個是js的常規模式,也就也是同步操做任務。java

弊端:同步操做任務帶來的問題是,只要一個任務執行時間過程,後面的任務都會排隊等待,拖延整個程序的執行,如:常見的瀏覽器假死極可能就是js任務執行時間太長致使。瀏覽器

爲了解決同步操做帶來的弊端,js語言增長了異步任務的操做模式:當前任務能夠攜帶回一個回調函數(當前任務執行時間過長,把須要提早執行的任務放在回掉中);能夠利用setTimeout構建異步任務,讓主邏輯優先執行,對於耗時間長的任務能夠放在setTimeout中異步執行。因此異步操做任務主要是改變了程序的正常執行操做順序。異步

以下:ide

<script type="text/javascript">
console.log("1")
setTimeout(function(){
console.log("2")
},0)
setTimeout(function(){
console.log("3")
},0)
setTimeout(function(){
console.log("4")
},0)
console.log("5")函數

</script>線程

執行結果爲:隊列

1
5
2
3
4事件

那麼大體的運行機制以下:
(1)在js主程序(單線程)上的同步任務造成了一個主任務執行棧
(2)主線程以外還存在一個任務隊列,這個隊列存在一些按時間順序存放的事件,如鼠標點擊、計時觸發等,主線程中每出現一個異步任務,任務隊列就會增長一個異步任務的事件
(3)通常執行棧中的同步任務執行完畢,系統就會讀取任務隊列,看看哪些事件是能夠執行的,一旦能夠執行將進入執行棧開始執行
(4)不斷重複以上動做ip

相關文章
相關標籤/搜索