什么是闭包?
首先,闭包可以理解为一个函数。
闭包是怎么产生的呢?当一个作用域可以访问另一函数的局部变量时,就会产生闭包现象;
而被访问的局部变量所在的函数叫做闭包函数。
闭包有什么用?
- 延伸了局部变量的作用范围
一般函数执行完后,函数内部的局部变量会被销毁,但是由于闭包,使得局部变量的寿命延长了;同时,我们可以在函数以外的地方使用局部变量,所以闭包延伸了局部变量的作用范围 - 可以避免全局变量的污染
例如我们可以使用IIFE形成一个闭包,使这个函数变成一个独立的模块,避免变量重名的影响
闭包有什么缺点?
虽然闭包也有其作用,但是我们在做项目优化的时候,总是强调要避免闭包的使用,这是为什么呢?
闭包的缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露
来一个案例看看闭包的使用
实现li列表的点击事件
const lis = document.getElementsByTagName('li')
for(var i = 0; i < lis.length; i++) {
// 使用闭包
(function(i) {
lis[i].onclick = function() {
console.log(lis[i].innerHTML)
}
})(i)
}