概述
閉包就是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)
概念
機制
當前函數(shù)執(zhí)行,會形成一個私有的上下文,函數(shù)執(zhí)行完后劲绪,當前執(zhí)行上下文中的某些內(nèi)容,被當前上下文以外的內(nèi)容所占用盆赤,那么當前上下文就不能被釋放贾富。
思路
- 函數(shù)執(zhí)行 -> 形成私有上下文環(huán)境。
- 函數(shù)執(zhí)行完成 -> 當前執(zhí)行上下文環(huán)境中的某些內(nèi)容牺六,被當前執(zhí)行上下文外的內(nèi)容所引用颤枪。
- 當前執(zhí)行上下文不能被釋放 -> 當前執(zhí)行上下文中的變量就不會銷毀釋放。
例子
const a = 4;
function f(a) {
let variate = 4;
const c = function () {
// 2. 函數(shù) f 執(zhí)行完成 淑际,執(zhí)行函數(shù) f 時形成私有的上下文環(huán)境中的變量 variate 被函數(shù) c 中的內(nèi)容所引用
// 每次調(diào)用 result() 都會從 函數(shù) f 的執(zhí)行上下文中尋找變量 variate 來引用
variate++;
console.log(variate + a);
}
return c;
}
// 1. 執(zhí)行函數(shù) f 畏纲,會形成 f 私有的上下文環(huán)境
const result = f(a);
// 3. 函數(shù) f 并沒用被釋放扇住,變量 variate 也就沒用被銷毀,而是還存在
// 每次運行 result() 使用的 variate 會遞增
result(); // 9
result(); // 10
result(); // 11
result(); // 12