闭包
什么是闭包?
嵌套函数,一个函数引用另一个函数的变量,就会形成一个闭包
为什么要用闭包?
局部变量无法长久共享和保存,全局变量可能造成变量污染
闭包就可以结局这种机制 闭包可以长久保存变量并且不会造成全局污染
闭包的形成条件
返回的是一个函数,并且这个函数对局部变量存在引用,维持变量的存在
闭包的写法
// 闭包的写法
function fn() {
var a = 1
return function () {
a++
console.log(a);
}
}
const fn1 = fn() //fn()执行的结果是闭包
fn1() //2
fn1() //3
const fn2 = fn()
fn2() //2 这里为什么为2? 因为fn()的执行结果是闭包,fn2相当于用又创建了个闭包,闭包之间相互独立的,互不影响
闭包的优缺点
优点
- 可以将一个变量长期储存在内存中,用于缓存
- 可以避免全局变量的污染
- 加强封装性,是实现了对变量的隐藏和封装
缺点
容易造成内存泄漏,闭包会携带包含其他的函数作用域,因此占用更多内存
闭包的使用场景
//定时器
for (var i = 1; i <= 5; i++) {
setTimeout(function timer() {
console.log(i);
}, i * 1000);
}
//vue中
data(){
return {}
}