1. 使用函數內部的變數在函數執行完後,仍然存活在記憶體中(延長了區域變數的生命周期)
2. 讓函數外部可以操作(讀 / 寫)到函數內部的數據(變數 / 函數)

問題:
  1. 函數執行完後,函數內部聲明的區域變數是否還存在?
-- 一般是不存在的,但如果是存在於閉包中的變數才可能存在
  2. 在函數外部能直接訪問函數內部的區域變數嗎?
-- 不能,但可以通過閉包讓外部操作它
1. 產生: 在嵌套內部函數定義執行完(定義完函數)時就產生了(不是在調用)
2. 死亡: 在嵌套的內部函數成為垃圾物件時
<script type="text/javascript">
  // 此時閉包就已經產生了,因為函數提升,內部函數物件已經創建了
  function fn1() {
    let a = 2;
    function fn2() {
      a++;
      console.log(a);
    }

    return fn2;
  }

  let f = fn1();
  f();  // 3
  f();  // 4

  f = null;   // 閉包死亡(包含閉包的函數物件成為垃圾物件)

</script>

 

創作者介紹
創作者 bingzhichen 的頭像
bingzhichen

空境界

bingzhichen 發表在 痞客邦 留言(0) 人氣()