1. 程式人生 > >執行環境及作用域、變數物件、作用域鏈、閉包

執行環境及作用域、變數物件、作用域鏈、閉包

一:執行環境及作用域 和 變數物件

執行環境是javascript中最為重要的一個概念。每個執行環境都有一個與之關聯的變數物件(儲存執行環境中所有定義的變數和函式)。二:

  1. 當代碼在執行環境中執行時,會建立一個作用域鏈。作用域鏈本質是一個指向變數物件的指標列表。

  2. 如果執行環境是函式,則將其活動物件(最開始時只包含一個變數->argument物件)作為變數物件。ps:argument物件在全域性環境中是不存在的.

  3. (基於2條件下)作用域鏈中的下一個變數物件來自外部環境,而再下一個變數物件則來自下下個外部環境。這樣,一直延續到全域性執行環境;全域性執行環境的變數物件始終都是作用域鏈中的最後一個物件。

 

三:js沒有塊級作用域**</pre>

注:在js中if語句中的變數申明會將變數新增到if外部的執行環境中(當前是指window變數);此時window變數物件中有一個值是 color = 'blue'

注:在js中for迴圈結束後依然會存在迴圈外部的執行環境中,即window變數物件有 i = 10四:

  閉包是指有權訪問另一個函式作用域中的變數的函式,建立閉包的常見方式,就是在一個函式內部建立另一個函式。

//建立函式

//呼叫函式

注:createComparisonFunction()函式返回後,其執行環境的作用域鏈會被銷燬,但它的活動物件仍然會留在記憶體中,匿名函式的作用域鏈仍然在引用這個活動物件

以上是作用域鏈的這種配置機制引出了一個副作用,即閉包只能獲取外部函式任何變數的最後一個值

修改:

最後

“相信有很多想學前端的小夥伴,今年年初我花了一個月整理了一份最適合2018年學習的web前端乾貨,從最基礎的HTML+CSS+JS到移動端HTML5等都有整理,送給每一位前端小夥伴,53763,1707這裡是小白聚集地,歡迎初學和進階中的小夥伴。”

祝大家早日學有所成,拿到滿意offer,快速升職加薪,走上人生巔峰。