Skip to content

關於 JS 作用域裡面的解釋 #1

@aszx87410

Description

@aszx87410

您好,首先先感謝你的詳細解釋,我覺得 JS 作用域這篇的思路特別好,透過 JS 引擎在執行時候的觀點可以把一些知識點講解的很清楚,例如說作用域跟變量提升。

然而我這邊有一個小問題,文章裡面說到:每当 JS 引擎发现一个函数调用 (注意是调用,而不是声明),它就会创建一个新的函数执行环境。,我想問一下如果是這樣的話,該如何解釋閉包?

例如說以下代碼:

function giveMeClosure() {
  var count = 0
  function closure() {
    console.log(count++)
  }
  return closure
}

var func = giveMeClosure()
func()

在最後一行的 func() 之前都沒有調用裡面的 closure,可是這時候因為已經離開了 giveMeClosure,它的執行環境已經被銷毀,這樣就沒辦法解釋閉包如何存取到 giveMeClosure 執行環境的活動變量。

想請問這一個部分應該如何解釋,是不是其實在聲明函數的時候就已經有創建作用域鏈了?或是有其他機制可以解釋這個行為?

感謝

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions