闭包及其使用
闭包:即跨作用域访问变量就是闭包,是函数作用域的一种体现;
作用:闭包能使变量私有化,模块化
优缺点:
优点:变量私有化,减少变量全局污染。
缺点:变量不会被垃圾回收机制回收,会造成大量的内存开销,甚至造成内存泄漏
闭包常见的实例:
- 实现一个不会重复的计数器
const account = (function(){
var num = 0
return function(){
return ++num
}
})()
console.log(account()) // 1
console.log(account()) // 2
console.log(account()) // 3
console.log(account()) // 4
- 模拟块级作用域
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
// 运行结果是每隔1s输出5
for (var i = 0; i < 5; i++) {
(function(num) {
setTimeout(() => {
console.log(num);
}, num * 1000);
})(i);
}
// 运行结果是每隔1s分别输出0,1,2,3,4