Closure
→閉包
JavaScript
限制變數在儲存環境的作用範圍
利用變數作用域的特性,加上一層function
避免污染global環境
變數不會在function執行完畢後消失
會保留結果至下次執行
code:without closure(javascript)
// without closure
var count = 0;
function counterTick() {
return ++count;
}
console.log(counterTick()); // 1
console.log(counterTick()); // 2
code:with closure(javascript)
// with closure
function counter() {
var count = 0;
function counterTick() {
return ++count;
}
return counterTick;
// also could be written as arrow function
// return () => ++count;
}
var countFunc = counter();
console.log(countFunc()); // 1
console.log(countFunc()); // 2
2018-12-08 所有的函式都是閉包:談 JS 中的作用域與 Closure
Huli
Closure的例外
2022-08-16 JavaScript のクロージャーと for 文の let 初期化の例外
code:javascript
const a = [];
{
for (let i = 0; i < 10; i++) {
ai = () => console.log(i);
}
}
a3(); // 3
{
let i;
for (i = 0; i < 10; i++) {
ai = () => console.log(i);
}
}
a3(); // 10
{
for (let i = 0; i < 10; ) {
ai = () => console.log(i);
i++;
}
}
a3(); // 4