JavaScript閉包(Closure)是一種在函數(shù)內(nèi)部創(chuàng)建并返回另一個(gè)函數(shù)的技術(shù)。閉包使得內(nèi)部函數(shù)可以訪問外部函數(shù)的變量和參數(shù),即使外部函數(shù)已經(jīng)執(zhí)行完畢。閉包的形成主要依賴于JavaScript的詞法作用域規(guī)則。
以下是形成閉包的基本步驟:
下面是一個(gè)簡(jiǎn)單的閉包示例:
function outer() {
var count = 0; // 這是一個(gè)局部變量
function inner() {
count++; // 內(nèi)部函數(shù)可以訪問外部函數(shù)的局部變量
console.log(count);
}
return inner; // 返回內(nèi)部函數(shù)
}
var counter = outer(); // outer函數(shù)執(zhí)行完畢,返回inner函數(shù),并將其賦值給counter變量
counter(); // 輸出1
counter(); // 輸出2
在這個(gè)示例中,outer
函數(shù)包含一個(gè)局部變量count
和一個(gè)內(nèi)部函數(shù)inner
。inner
函數(shù)可以訪問count
變量,并在每次調(diào)用時(shí)遞增它。當(dāng)我們調(diào)用outer
函數(shù)時(shí),它返回inner
函數(shù),并將其賦值給counter
變量。然后我們可以多次調(diào)用counter
函數(shù),每次調(diào)用都會(huì)使count
變量遞增并輸出其值。盡管outer
函數(shù)已經(jīng)執(zhí)行完畢,但由于閉包的作用,inner
函數(shù)仍然可以訪問count
變量。