整合營銷服務商

                          電腦端+手機端+微信端=數據同步管理

                          免費咨詢熱線:

                          閉包的微觀世界

                          如果要更加深入的了解閉包以及函數a和嵌套函數b的關系,我們需要引入另外幾個概念:函數的執行環境(excution context)、活動對象(call object)、作用域(scope)、作用域鏈(scope chain)。以函數a從定義到執行的過程為例闡述這幾個概念。

                          1. 定義函數a的時候,js解釋器會將函數a的作用域鏈(scope chain)設置為定義a時a所在的“環境”,如果a是一個全局函數,則scope chain中只有window對象。
                          2. 當執行函數a的時候,a會進入相應的執行環境(excution context)。
                          3. 在創建執行環境的過程中,首先會為a添加一個scope屬性,即a的作用域,其值就為第1步中的scope chain。即a.scope=a的作用域鏈。
                          4. 然后執行環境會創建一個活動對象(call object)?;顒訉ο笠彩且粋€擁有屬性的對象,但它不具有原型而且不能通過JavaScript代碼直接訪問。創建完活動對象后,把活動對象添加到a的作用域鏈的頂端。此時a的作用域鏈包含了兩個對象:a的活動對象和window對象。
                          5. 下一步是在活動對象上添加一個arguments屬性,它保存著調用函數a時所傳遞的參數。
                          6. 后把所有函數a的形參和內部的函數b的引用也添加到a的活動對象上。在這一步中,完成了函數b的的定義,因此如同第3步,函數b的作用域鏈被設置為b所被定義的環境,即a的作用域。
                          了解更多內容:請訪問:雨點網絡 石家莊網站制作 石家莊網站建設

                          无码中文字幕乱码一区