1、什么是闭包
- 闭包是抽象的概念
- 闭包其实指的就是满足一定的条件下(闭包的形成条件),会形成一个闭包的容器(非js对象)
- 该对象用于收集内部函数使用的外部函数的变量
- 因为闭包形成的闭合对象保存在内部函数的[[scopes]]中
2、闭包的形成条件
- 当嵌套的内部函数引用了外部函数的变量时就产生了闭包
- 什么时候产生的闭包? 调用外部函数, 执行内部函数定义(创建函数对象)后
- 通过chrome工具得知: 闭包本质是内部函数中的一个对象, 这个容器中包含引用的变量
3、作用:
-
延长局部变量的生命周期
-
让函数外部能操作内部的局部变量
<script>
function fn1() {
var a = 2;
function fn2() {
a++;
console.log(a);
}
return fn2;
}
var f = fn1();
f();
f();
var f2 = f
f = null
</script>
- 写一个闭包程序:
- 注意: 如果外部函数执行完后, 内部函数对象如果没有被外部变量引用, 内部函数对象与闭包就会立即被回收释放
4、闭包有哪些特点呢?
(1)让外部访问函数内部变量成为可能;
(2)局部变量会常驻在内存中;
(3)可以避免使用全局变量,防止全局变量污染;
(4)如果大规模使用闭包,可能会造成内存泄漏
5、区别闭包的三个操作
- 产生闭包: 内部函数对象创建时产生, 包含那个被引用的变量的容器(不是js对象)
- 使用闭包: 执行内部函数
- 释放闭包: 让内部函数对象成为垃圾对象, 断开指向它的所有引用
- 闭包的应用:
- 举删除删除列表中的的某个商品的例子(带确定框)