執行環境,做用域,做用域鏈詳解

一、執行環境:也稱「環境」,執行環境定義了變量或函數有權訪問的其餘數據,決定了他們各自的行爲。(全局定義的變量,函數裏面能夠訪問。通常狀況下,函數裏面定義的變量,全局沒法訪問)。html

二、全局執行環境:全局執行環境是最外圍的一直執行環境,(在web瀏覽器中,全局執行環境被認爲是window對象,所以全部全局變量和函數都是做爲window對象的屬性和和方法建立的),全局環境直到應用程序退出(關閉網頁或者刷新網頁)纔會被銷燬。前端

三、局部執行環境:某個函數的局部執行環境中的全部代碼執行完畢後,該環境被銷燬,保存在其中的全部變量和函數定義也隨之銷燬。web

四、變量對象:每一個執行環境都有一個與之關聯的變量對象,環境中定義的全部變量和函數都保存在這個對象中。(咱們沒法訪問這個對象,可是解析器在處理數據時會在後臺使用它)。瀏覽器

五、活動對象:活動對象在函數執行環境中會被做爲變量對象。活動對象在最開始時只包含一個變量(argument對象)。(變量對象在函數執行環境中稱爲活動對象)函數

六、做用域鏈:當代碼在一個環境中執行時,會建立變量對象的一個做用域鏈。做用域鏈的用途,是保證對執行環境有權訪問的全部變量和函數的有序訪問。(做用域鏈的前端,始終都是當前執行的代碼所在環境的活動對象);htm

做用域鏈中的下一個變量對象來自包含(外部)環境,而在下一個變量對象則來自下一個包含環境。這樣一直延續到最後的全局執行環境。對象

一、若是一個做用域中,有變量的聲明-無論這個變量的聲明在使用變量的前面仍是後面, 這個使用變量不會去上一級做用域查找變量
二、若是在一個做用域中使用一個變量(獲取這個變量的值來使用);這個做用域中沒有這個變量的聲明,他就會去上一級做用域中查找這個變量,若是找到了,就直接拿到這個變量的值; 若是上一級做用域沒有找到就再往上一級查找,直到找到全局做用域爲止,有就拿來用,若是全局也沒找到這個變量的聲明,就報錯
三、若是在一個做用域中修改一個變量的值,這個做用域中沒有這個變量的聲明,就去上一級做用域中查找這個變量,若是找到了,就把上一級做用域中的這個變量的值給修改了; 若是上一級也沒有找到這個變量的聲明,就再往上一級做用域中查找這個變量,直到找到全局做用域爲止,若是在全局找到了,就把全局做用域中這個變量的值給修改,若是在全局做用域中也沒有找到這個變量的聲明,那麼他本身就會成爲一個全局變量
相關文章
相關標籤/搜索