-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
您好,首先先感謝你的詳細解釋,我覺得 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
Labels
No labels