瞭解閉包

  • 變量的作用域

變量作用域分爲兩種:全局變量和局部變量

  1. 函數內部可以使用全局變量
  2. 函數外部不可以使用局部變量
  3. 當函數執行完畢,本作用域的局部變量會銷燬
  • 什麼是閉包

閉包就是指有權訪問另一個函數作用域中變量的函數。

簡單理解就是一個作用域可以訪問另外一個函數內部的局部變量

在本質上,閉包就是將函數內部和函數外部連接起來的一座橋樑。

例題

函數一執行,會形成一個全新獨立的私有作用域。

當前函數執行,形成一個私有作用域a,a的上級作用域是誰,和他在哪執行的沒有關係,和他在哪創建(定義)的有關係,在哪創建,他的上級作用域就是誰

  • 堆內存和棧內存的釋放

堆內存:存儲引用數據類型值(對象:鍵值對;函數:代碼字符串)

棧內存:提供JS代碼執行的環境和存儲基本數據類型

堆內存釋放

讓所有引用堆內存空間地址的變量賦值爲null即可(沒有變量佔用這個堆內存了瀏覽器會在空閒的時候把它釋放掉)

棧內存釋放

一般情況下,當函數執行完成,所形成的私有作用域(棧內存)都會自動釋放掉(在棧內存中存儲的值也會釋放掉),但也有特殊情況:

  1. 函數執行完成,當前形成的棧內存中,某些內容被棧內存以外的變量佔用了,此時不能釋放(一旦釋放,外面找不到原有的內容了)
  2. 全局棧內存只有在頁面關閉的時候纔會被釋放掉
  3. 如果當前棧內存沒有被釋放,那麼之前棧內存中存儲的基本值也不會被釋放

例題

 

  • 閉包的作用

  1. 保護作用:形成私有變量不受外界的干擾
  2. 保存作用:形成不銷燬的棧內存,把一些值保存下來方便後面的調用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章