函數的執行空間會在函數執行完畢之後銷燬
但是,一旦函數內部返回了一個 參照資料型別,並且 在函數外部有變數接受 的情況下
那麼這個函數 執行空間 就不會銷燬了
function fn() {
const obj = {
name: 'Jack',
age: 18,
gender: '男'
}
return obj
}
const o = fn()
閉包就是利用了這個函數執行空間不銷燬的邏輯
閉包概念
1、有一個 A 函數,再 A 函數內部返回一個 B 函數;
2、再 A 函數外部有變數參照這個 B 函數;
3、B 函數內部存取著 A 函數內部的私有變數。
以上三個條件缺一不可
閉包的特點
為什麼要叫做特點,就是因為他的每一個點都是優點同時也是缺點
1、作用域空間不銷燬
優點: 因為不銷燬,變數頁不會銷燬,增加了變數的生命週期
缺點: 因為不銷燬,會一直佔用記憶體,多了以後就會導致記憶體溢位
2、可以利用閉包存取再一個函數外部存取函數內部的變數
優點: 可以再函數外部存取內部資料
缺點: 必須要時刻保持參照,導致函數執行棧不被銷燬
3、保護私有變數
優點: 可以把一些變數放在函數裡面,不會汙染全域性
缺點: 要利用閉包函數才能存取,不是很方便