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>
文章標籤
全站熱搜