我正在關注article on javascript closures。嵌套執行上下文的生存期
在試圖瞭解執行環境的細節時,我遇到了令我感到驚訝的結果。
var globalVar = 'g';
var inner;
var outer = function() {
var outerVar = 'o';
inner = function() {
var innerVar = 'i';
console.log(innerVar, outerVar, globalVar);
}
}
outer()
inner() // Q: What does this log out?
這實際上輸出i o g
。
我期待看到i undefined g
。
這是我對過程的理解。我想了解我的錯誤:
inner
被聲明爲全局對象的屬性和值設置爲undefined
outer
被調用。- 爲
outer
創建執行上下文,其作用域鏈包括outerVar
和全局對象。 - 全局對象上
inner
屬性的值被賦予對函數定義的引用。 - 完成
outer
的執行上下文。 (相關示波器被刪除?標記爲GC?) inner
被調用。- 創建一個執行上下文,其作用域鏈包括
innerVar
和全局對象。 outerVar
的範圍並不
發現有人可以解釋爲什麼outerVar
定義?
你剛發現關閉! [JavaScript關閉如何工作?](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) – Bergi
這也可能是答案:http://stackoverflow.com/a/ 11148475/111243 – SimplGy
@Bergi,這個評論可能會超出必要的範圍。我認爲這是一個關於調用和聲明之間的細微差別的問題,我不明白,而不是需要一個總體的概述。我正在閱讀幾個不同的概述,只是一樣:) – SimplGy