JS闭包
基本概念
如果一个函数引用了父级及父级以上的作用域的变量,那么这个函数就是一个闭包函数。
实现闭包的最常用方法就是函数嵌套,如
function foo() {
var a = 1
return funtion() {
a = a + 1
}
}
闭包的特点
- 被闭包函数访问的父级及以上的变量,会一直存在于内存中,不会被JS的垃圾回收机制回收。
- 闭包实现了对其他函数内部变量的访问。(函数内部的变量对外是不能访问的,闭包通过这种变通的方法实现了访问)
JS的垃圾回收机制
- 如果一个对象不再被引用,那么这个对象就会被GC回收。
- 如果两个对象相互引用,而不再被第三者引用,那么这两个对象都会被回收。
闭包的应用场景
- 封装私有变量
- 缓存变量,如节流防抖函数
- 模拟块级作用域
- 创建模块