理解javascript事件執行機制 眾所周知,js是一個單線程的語言,這意味著同一時間只能做一件事,但是我們又說js是非同步的。首先,單線程並不是沒有優點。作為瀏覽器腳本語言,JavaScript 的主要用途是與用戶互動,以及操作 DOM。這決定了它只能是單線程,否則會帶來很複雜的同步問題。比如,假 ...
眾所周知,js是一個單線程的語言,這意味著同一時間只能做一件事,但是我們又說js是非同步的。首先,單線程並不是沒有優點。作為瀏覽器腳本語言,JavaScript 的主要用途是與用戶互動,以及操作 DOM。這決定了它只能是單線程,否則會帶來很複雜的同步問題。比如,假定JavaScript 同時有兩個線程,一個線程在某個 DOM 節點上添加內容,另一個線程刪除了這個節點,那最後應該以哪個為準呢? 所以,為了避免複雜性,從一誕生,JavaScript 就是單線程,這已經成了這門語言的核心特征,將來也不會改變。
實際上,主線程只會做一件事情,就是從消息隊列裡面取消息、執行消息,再取消息、再執行。當消息隊列為空時,就會等待直到消息隊列變成非空。而且主線程只有在將當前的消息執行完成後,才會去取下一個消息。這種機制就叫做事件迴圈機制,取一個消息並執行的過程叫做一次迴圈 。就如圖所示一樣