闭包
闭包是一片不会被销毁的EC。它对EC中的数据有保护和保存的作用。 (闭包就是能够读取其他函数内部变量的函数)
保护:防止像全局变量那样被污染,数据在函数内部,外界访问不了。 保存:可以像全局变量那样,延长变量的生命周期。
应用场景:
- 模块封装,在各模块规范(ES6)出现之前,都是用这样的方式防止变量污染全局
- 数据私有化
- 封装一些工具函数
- 在循环中创建闭包,防止取到意外的值。
- 防抖 、节流 、⽴即执⾏函数 、组合函数等等
闭包使用不当可能会导致内存泄露
闭包的作用
1.延长了变量的生命周期
2.扩大了变量的作用范围
3.保护了变量
缺点:
1.会导致内存泄漏
简单实现闭包
<script>
var a=200;
function fn(){
var a=100;//局部变量
function gn(){
console.log(a);//这里输出的a是fn中的局部变量a
// 也就是说 gn函数中的语句 引用了fn中的局部变量
}
gn();
return gn;//将函数gn返回
}
var r=fn();//在这里的时候就已经形成了闭包
// 这里的r接收的是函数gn的地址
r();//调用了函数 调用了gn
</script>
再来一个
<script>
var i = 0;
function A() {
var i = 10;
function x() {
console.log(i);
}
return x;
}
var y = A();
y();
function B() {
var i = 20;
y();
}
B();
</script>
结束语
如果你觉得这篇文章对你有所帮助,可以伸出你的小手,为这篇文章点个赞
每一篇文章都是我学习的记录,通过分享,不仅能够加深我对知识的理解,还希望能够为大家提供一些微薄但有用的信息。如果你发现文章中有任何错误或者有更好的建议,欢迎在评论区或者下面的公众号告诉我,我将会及时进行修改。
最后,希望我的文章能够给大家带来一些收获。感谢大家的支持!