闭包

62 阅读1分钟

闭包

什么是闭包?

嵌套函数,一个函数引用另一个函数的变量,就会形成一个闭包

为什么要用闭包?

局部变量无法长久共享和保存,全局变量可能造成变量污染
闭包就可以结局这种机制 闭包可以长久保存变量并且不会造成全局污染

闭包的形成条件

返回的是一个函数,并且这个函数对局部变量存在引用,维持变量的存在

闭包的写法

// 闭包的写法
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 {}
}