讀《全局做用域中,用const和let聲明的變量去哪了?》

輸入

全局做用域中,用const和let聲明的變量去哪了?函數

問題

各位大佬,問個問題,let、const聲明的變量,暴露在全局,爲何沒掛載到window下?究竟掛載到哪裏去了?post

輸出

咱們打開控制檯,輸入spa

const a = 123;
function abcd() {
    console.log(a);  // abcd函數的做用域能訪問到a
};
dir(abcd);

能夠在方法的[[Scopes]] 屬性中,看到變量a

圖片描述

const、let 這類都是,屬於聲明性環境記錄,「Declarative Environment Records」 ,和函數、類這些同樣,在單獨的存儲空間。
var這類,屬於對象性環境記錄,「object environment record」,會掛載到某個對象上,也會沿着原型鏈去向上查找code

說明const、let聲明變量不掛載到對象上,可是在全局的活動對象中能訪問到let、const 聲明記錄,也就是做用域鏈那邊沒問題對象

可是不是全局window對象的屬性,因此window.a訪問不到blog

相關文章
相關標籤/搜索