摘要:當執行流進入一個函數時,函數的環境就會被推入一個環境棧中。在函數執行完后,棧將其環境彈出,把控制權返回給之前的執行環境。執行環境可以分為創建執行銷毀三個階段。在這個階段,作用域鏈會被初始化,的值也會被最終確定。
執行環境
執行環境中定義了變量和函數有權訪問的其他數據,決定了他們各自的行為。
當JavaScript解釋器初始化執行代碼時,它首先默認進入全局執行環境,從此刻開始,函數的每次調用都會創建一個新的執行環境。
每個函數都有自己的執行環境。當執行流進入一個函數時,函數的環境就會被推入一個環境棧中(execution stack)。在函數執行完后,棧將其環境彈出,把控制權返回給之前的執行環境。ECMAScript程序中的執行流正是由這個便利的機制控制著。
執行環境可以分為創建、執行、銷毀三個階段。在創建階段,解析器首先會創建一個變量對象(variable object),它由定義在執行環境中的變量、函數聲明、和參數組成。在這個階段,作用域鏈會被初始化,this的值也會被最終確定。在執行階段,代碼被解釋執行。 某個執行環境中的所有代碼執行完畢后,該環境被銷毀,保存在其中的所有變量和函數定義也隨之銷毀
作用域鏈當代碼在一個執行環境中執行時,會創建變量對象的一個作用域鏈
作用域鏈的作用是:保證對 當前執行環境權訪問的所有變量和函數的有序訪問
作用域的前端始終是當前執行的代碼所在環境的變量對象
作用域鏈的最后始終是全局執行環境的變量對象
作用域鏈里只包含上一級的變量對象,但并不包括下一級的變量對象
標識符解析的是沿著作用域鏈一級一級地搜索標識符的過程,搜索始終從作用域鏈的前端開始(當前環境的變量對象),逐級向后查找(上級環境的變量對象),直至找到標識符為止
內部環境可以通過作用域鏈訪問所有外部環境,但是外部環境無法訪問內部環境中的任何變量和函數
延長作用域鏈:
在作用域鏈的前端(自己的變量對象之前)臨時增加一個變量對象,該變量對象會在(這段)代碼執行后被移除
try-catch語句中的catch塊
with語句:
function builder(){ var str = "advd" // 在作用域鏈的前端臨時增加了一個變量對象,這樣在當前執行環境中就可以訪問loaction的屬性和方法了 with(location){ var url = href + str } // 當with代碼執行后,作用域鏈中的臨時變量對象被移除,此時無法訪問href console.log(href) // Uncaught ReferenceError: href is not defined return url }作用域
我認為作用域鏈是對變量對象/執行環境而言的,當執行環境中出現一個變量時,應該按照怎樣的搜索方式(沿著作用域鏈)去找到這個變量
作用域是對于變量而言的,指明了這個變量在哪些地方可以被訪問到,例如某一變量處于全局作用域中,則該變量可以在代碼的任何地方被訪問到
全局作用域:
最外層函數和最外層函數外面定義的變量擁有全局作用域
所有 未定義 (要理解這個未定義的含義) 直接賦值的變量自動聲明為擁有全局作用域
window對象的屬性擁有全局作用域
函數作用域:
在函數中定義的變量
給函數傳遞的參數
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83164.html
摘要:所以,全局執行環境的變量對象始終都是作用域鏈中的最后一個對象。講到這里,可能你已經對執行環境執行環境對象變量對象作用域作用域鏈的理解已經他們之間的關系有了一個較清晰的認識。 JavaScript中的執行環境、作用域、作用域鏈、閉包一直是一個非常有意思的話題,很多博主和大神都分享過相關的文章。這些知識點不僅比較抽象,不易理解,更重要的是與這些知識點相關的問題在面試中高頻出現。之前我也看過...
摘要:全局執行環境的變量對象始終是作用域鏈中的最后一個變量對象。綜上,每個函數對應一個執行環境,每個執行環境對應一個變量對象,而多個變量對象構成了作用域鏈,如果當前執行環境是函數,那么其活動對象在作用域鏈的前端。 1.幾個概念 先說幾個概念:函數、執行環境、變量對象、作用域鏈、活動對象。這幾個東東之間有什么關系呢,往下看~ 函數 函數大家都知道,我想說的是,js中,在函數內部有兩個特殊...
摘要:至此作用域鏈創建完畢。好了,通過深入理解作用域鏈,我們能跟好的理解的運行機制和閉包的原理。 前言 理解javascript中的作用域和作用域鏈對我們理解js這們語言。這次想深入的聊下關于js執行的內部機制,主要討論下,作用域,作用域鏈,閉包的概念。為了更好的理解這些東西,我模擬了當一個函數執行時,js引擎做了哪些事情--那些我們看不見的動作。 關鍵詞: 執行環境 作用域 作用域鏈 變...
閱讀 1240·2021-11-22 13:54
閱讀 1425·2021-11-22 09:34
閱讀 2698·2021-11-22 09:34
閱讀 4009·2021-10-13 09:39
閱讀 3342·2019-08-26 11:52
閱讀 3361·2019-08-26 11:50
閱讀 1529·2019-08-26 10:56
閱讀 1913·2019-08-26 10:44