闭包
1. 两个经典例子
1.1 First
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
// 结果是 5 5 5 5 5
es6之后这个经典问题将var转换为let就可以轻松解决。
原本之前可以创建一个闭包,将i作为参数传递给自执行函数像这个样子
for (var i: number = 0; i < 5; i++) {
(function (x) {
setTimeout(() => {
console.log(x)
}, 1000)
})(i)
}
// 结果是 0 1 2 3 4
1.2 Second
const fn = x => {
return y => {
return x + y
}
}
const a = fn(1) // 此时的a就是一个闭包
console.log(a(2)) //结果是3
网友评论