4月20號 對閉包和作用域鏈的理解

第一個概念:

作用域:可以把作用域理解爲JS引擎根據標識符查找變量的一套規則。在JS中,我們關注的是詞法作用域,詞法作用域是由變量所在位置決定的作用域。

作用域鏈(scope chain):代碼在執行時,執行環境會創建當前活動對象一個作用域鏈,每一個執行環境都有一個與之關聯的變量對象,這個作用域鏈可以理解爲包含許多變量對象的一個列表,通過變量對象我們可以訪問到我們所需要的的數據,作用域的前端始終是當前執行環境所關聯的變量對象,末端是全局環境關聯的變量對象。

閉包(closures):閉包是一種現象,是基於函數產生的,跟作用域鏈關聯在一起的,跟垃圾回收機制有關,內部函數比外部函數擁有更長的生命週期,如果內部函數被外部函數返回或者存儲在某處的屬性裏,這時就會有一個外部引用指向這個嵌套的函數,他不會被當做垃圾回收,他所在的活動對象也不會被當做垃圾回收。 但所在活動對象在執行完畢後,活動對象的作用域鏈會被銷燬,因爲內部函數的作用域鏈仍然在引用這個活動對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章