函數的閉包

2020-10-25 13:00:44

函數的執行空間會在函數執行完畢之後銷燬

但是,一旦函數內部返回了一個 參照資料型別,並且 在函數外部有變數接受 的情況下

那麼這個函數 執行空間 就不會銷燬了

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、保護私有變數
優點: 可以把一些變數放在函數裡面,不會汙染全域性
缺點: 要利用閉包函數才能存取,不是很方便