概念:闭包是指有权访问另一个函数作用域中的变量的函数
1. 闭包产生的条件
函数嵌套
内部函数引用了外部函数的数据(可以是变量或者函数),由于变量一直被引用,导致引用的变量未被回收
换句话说:简单地访问函数的词法作用域(静态作用域)以外的自由变量会创建一个闭包。
2. 常见的闭包
将函数作为另一个函数的返回值(函数不必为了被称为闭包而返回,看看闭包产生的条件)
将函数作为实参传递给另一个函数调用
// 图片自动轮播并返回当前索引
function closure() {
let i = 0
return function() {
return console.log(i++)
}
}
var output = closure()
output() //0
output() // 1
output() //2
闭包有三个特性:
函数嵌套函数。
函数内部可以引用外部的参数和变量。
参数和变量不会被垃圾回收机制回收。
闭包的好处:
可以读取函数内部的变量
希望一个变量长期存储在内存中。
避免全局变量的污染。
私有成员的存在。
闭包的缺点:
常驻内存,增加内存使用量。
使用不当会很容易造成内存泄露。
网友评论