闭包

闭包是什么?

概念:能够读取到其他函数内部变量的函数
函数外部无法访问函数的局部变量,但函数内部函数可以访问本函数内的局部变量,故通过闭包实现函数外部访问函数内部局部变量。但容易造成内存泄漏,应当谨慎使用。

例如:

function Foo(){
  var i = 1
  return function(){
    console.log(i++)
  }
}
let f1=Foo()
let f2=Foo()
f1() // 0
f1() // 1
f2() // 0

一般来说函数执行完后其局部变量就会随着函数调用结束被销毁,但是Foo函数返回了匿名函数的引用即闭包它可以访问到foo()被调用的生产环境,局部变量i一致处于这个环境中才可能被访问到,只要有一个黄静有可能被访问到,它就不会被销毁,所以闭包由延续变量的作用

闭包的使用场景

1、setTimeout
原生的setTimeout第一个函数不能带参数,通过闭包可以实现传参

function a(param){
  return function(){
    console.log(param)
  }
}
setTimeout(a(1),1000)

2、封装私有变量

function Person(){
    var age= 1;
    this.getAge:function(){
        return age;
    }
    this.setAge:function(value){
        age= value;
    }
    this.ageIcr.function(){
        age++
    }
}
let p = new Person()
console.log(p.getAge())//1
console.log(p.setAge(10))
console.log(p.getAge())//10
console.log(p.ageIcr())
console.log(p.getAge())//11

你可能感兴趣的:(闭包)