说说对闭包的理解及应用
# 是什么
闭包:函数 foo+函数 foo 访问的自由变量 a,这样的组合, 就是闭包
# 作用
- 创建私有变量,避免全局污染
- 实现模块化
- 块级作用域
# 应用场景
# 私有变量
function create_counter(initial) {
var x = initial || 0;
return {
inc: function() {
x += 1;
return x;
},
};
}
var c1 = create_counter();
c1.inc(); // 1
c1.inc(); // 2
c1.inc(); // 3
# 模块化
function Person2() {
var money = 50;
function makeMoney() {
return ++money;
}
function offer() {
return --money;
}
return {
makeMoney: makeMoney,
offer: offer,
};
}
# 块级作用域
//为了避免i的提升可以这样做
for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i);
}
# 弊端
- 内存泄漏
- 引用祖先函数的作用域,滥用会有问题
上次更新: 2021/12/19, 18:05:42