EASY
Given an integer n, return a counter function. This counter function initially returns n and then returns 1 more than the previous value every subsequent time it is called ().
接收一個整數n
作為參數,返回counter
函式。
這個counter
函式最初返回n
,然後每次被調用時會返回比前一次多1的值。(n, n + 1, n + 2,類推)
innerFunction
可以捕獲外部作用域outerFunction
的變數outerVar
以形成閉包。closure
引用outerFunction
,此時我們不需要了解outerVar
實現的細節,但可以取得outerVar
當前的值。function outerFunction() {
let outerVar = 10;
function innerFunction() {
console.log(outerVar); // 內部函數引用外部函數中的 outerVar
}
return innerFunction; // 返回內部函數
}
const closure = outerFunction(); // 將內部函數存儲在 closure 中
closure(); // 執行內部函數,仍然可以訪問 outerVar 的值
createCounter
中有一個閉包,包含counter
函式和變量n
const createCounter = (n) =>{
counter=()=>{
return n++; //後置遞增運算子 - 第一次調用 counterA() 返回 10,然後 n 增加到 11。
}
return counter;
}
// 將箭頭函式縮寫後,變成 const createCounter = (n)=> ()=> n++ ;
counterA
引用 createCounter(10)
的結果,因此繼承了 createCounter
函数内部的作用域,
此時counterA
閉包中的變數n
會被保存下來,在後續的調用中該變量都可以被訪問和修改。
const counterA = createCounter(10);
const results = [
counterA(),
counterA(),
counterA()
];
console.log(results); // 输出 [10, 11, 12]