##做用域 咱們能夠理解爲代碼起做用的區域es6
JS中的做用域 有兩種,分別是全局做用域 和 私有做用域
做用域 也能夠說就是一塊棧內存瀏覽器
棧內存 存儲值類型 提供代碼的運行環境 堆內存 存儲引用數據類型函數
全局做用域: 頁面一打開就會造成一個全局做用域 一個頁面只有一個全局做用域
私有做用域: 函數執行的時候會 造成一個私有的做用域
全局變量 在全局聲明的變量 叫作全局變量
私有變量 在私有做用域聲明的變量 叫作私有變量 形參也是私有變量
上級做用域 外層做用域:查找規律,上級做用域是誰,就看這個函數是在哪一個做用域聲明定義的
對於私有做用域中的某些變量 若沒有在私有做用域中聲明過,那麼函數執行時就會去上級做用域查找該變量 上級做用域若沒有該變量 則 接着向上級查找,
直到查找到全局做用域 若仍沒有 則報錯:
做用域鏈: 變量的查找機制 一直向上級做用域查找
函數執行的過程 也能夠這樣理解
先開闢一個私有做用域(棧內存),形參賦值,而後變量提高 而後代碼從上向下執行,
私有變量有: 形參 私有做用域中聲明過的變量 其餘的變量都是上級做用域的,
暫時性時區 在let 和const以前 不能使用他們聲明的任何變量
es6 針對 let和 const 聲明的變量 多了一個塊級做用域({}), 理解成一個私有做用域便可
堆內存的銷燬
用谷歌瀏覽器爲例子; 會按期的查看整個堆內存 把沒有被引用的堆內存銷燬掉 (回收)
棧內存的銷燬
全局做用域對應的棧內存:關閉頁面的時候纔會被銷燬
私有做用域對應的棧內存:通常狀況下 函數執行完成 對應的棧內存就會被銷燬
當返回值是個引用數據類型時 不會被銷燬
複製代碼