JavaScript 閉包

概述

閉包就是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù)

概念

機(jī)制

當(dāng)前函數(shù)執(zhí)行,會(huì)形成一個(gè)私有的上下文,函數(shù)執(zhí)行完后,當(dāng)前執(zhí)行上下文中的某些內(nèi)容,被當(dāng)前上下文以外的內(nèi)容所占用,那么當(dāng)前上下文就不能被釋放。

思路

  1. 函數(shù)執(zhí)行 -> 形成私有上下文環(huán)境。
  2. 函數(shù)執(zhí)行完成 -> 當(dāng)前執(zhí)行上下文環(huán)境中的某些內(nèi)容,被當(dāng)前執(zhí)行上下文外的內(nèi)容所引用。
  3. 當(dāng)前執(zhí)行上下文不能被釋放 -> 當(dāng)前執(zhí)行上下文中的變量就不會(huì)銷毀釋放。

例子

const a = 4;
function f(a) {
    let variate = 4;
    const c = function () {
        // 2. 函數(shù) f 執(zhí)行完成 ,執(zhí)行函數(shù) f 時(shí)形成私有的上下文環(huán)境中的變量 variate 被函數(shù) c 中的內(nèi)容所引用
        // 每次調(diào)用 result() 都會(huì)從 函數(shù) f 的執(zhí)行上下文中尋找變量 variate 來引用
        variate++;
        console.log(variate + a);
    }
    return c;
}

// 1. 執(zhí)行函數(shù) f ,會(huì)形成 f 私有的上下文環(huán)境
const result = f(a);
// 3.  函數(shù) f 并沒用被釋放,變量 variate 也就沒用被銷毀,而是還存在

// 每次運(yùn)行 result() 使用的 variate 會(huì)遞增
result(); // 9
result(); // 10
result(); // 11
result(); // 12
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容