0
点赞
收藏
分享

微信扫一扫

JavaScript 自學筆記42

慕犹清 2022-04-22 阅读 48

1. 執行環境 execution context

當JavaScript引擎執行代碼時,它會創建執行環境。而每個執行環境都有兩個階段:創建階段與執行階段。

(1). 執行環境的創建階段

在創建階段中,JavaScript引擎會執行以下幾個任務:

  • 首先,創建全局對象(如:瀏覽器的全局對象為window)。
  • 其次,創建this對象來綁定全局對象。
  • 再次,設置一個内存堆來存儲變量和函數引用。
  • 最後,在内存堆中存儲函數聲明,在全局執行環境中存儲變量,變量的初始值為未定義。

在這些任務都完成后,則進入執行階段。

(2). 執行環境的執行階段

在執行階段,JavaScript引擎逐行執行代碼,為變量賦值,並執行函數調用。

對於每一個函數的調用,JavaScript引擎都會創建一個新的函數執行環境。函數執行環境與全局執行環境相類似,區別在於創建的不是全局對象,而是參數對象,它是對函數所有參數的引用。

2. 調用棧 call stack

  • JavaScript引擎使用調用棧來管理執行環境。
  • 調用棧使用基於後進先出原則工作的堆棧數據結構。也就是説,后加入的工作會被優先處理。

如:function minus (a, b) {

return a - b;

}

function isNegative(a, b) {

return minus (a, b) < 0;

}

console.log(isNegative(2, 3)); // true

以上代碼中,調用棧的步驟大概是這樣的:

1. main()

2. console.log()

3. isNegative()

4. minus()

因爲遵循後進先出原則,所以JavaScript的執行順序大概是這樣的:

1. minus()

2. isNegative()

3. console.log()

4. main()

3. 事件循環 event loop

JavaScript是一個單綫程程序語言,但是它可以在事件循環的基礎上實現并發模型。

事件循環是一個不斷運行的過程,它協調調用棧和回調隊列之間的任務,以實現并發性。

步驟大概是這樣的:

Call Stack ---> Web API ---> Callback Queue ---> Event Loop ---> Call Stack

在Callback Queue裏排隊的程序只有當Call Stack裏空了以後,才會通過Event Loop傳到Call Stack裏去執行。

举报

相关推荐

0 条评论