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