JS語言有個特點是單執行緒,即同一時間只能做一件事。單執行緒就意味著,所有的任務需要排隊,前一個任務結束,才會執行後一個任務,可能造成頁面渲染不連貫。
為了解決這個問題,利用多核CPU的計算能力,允許JS指令碼建立多個執行緒,即同步和非同步。
同步任務:
非同步任務:
通過回撥函數實現的,非同步任務相關回撥函數新增到任務佇列中(任務佇列也稱為訊息佇列)。
在做一件事的同時,還可以去處理其他的事情。
比如做飯的非同步做法,在燒水的同時,利用這段時間,去切菜,炒菜。
同步和非同步本質的區別:在這條"流水線"上各個流程的執行順序不同。
JS執行機制步驟:
由於主執行緒不斷地重複獲得任務、執行任務、再獲取任務、再執行,所以這種機制被稱為事件迴圈,即event loop。
區別 | var | let | const |
---|---|---|---|
是否有塊級作用域 | ❌ | ✔ | ✔ |
是否存在變數提升 | ✔ | ❌ | ❌ |
是否新增全域性屬性 | ✔ | ❌ | ❌ |
能否重複宣告變數 | ✔ | ❌ | ❌ |
是否存在暫時性死區 | ❌ | ✔ | ✔ |
是否必須設定初始值 | ❌ | ❌ | ✔ |
能否改變指標指向 | ✔ | ✔ | ❌ |