閉包

閉包是什么?

概念:能夠讀取到其他函數內部變量的函數
函數外部無法訪問函數的局部變量,但函數內部函數可以訪問本函數內的局部變量,故通過閉包實現函數外部訪問函數內部局部變量。但容易造成內存泄漏,應當謹慎使用。

例如:

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

一般來說函數執(zhí)行完后其局部變量就會隨著函數調用結束被銷毀,但是Foo函數返回了匿名函數的引用即閉包它可以訪問到foo()被調用的生產環(huán)境,局部變量i一致處于這個環(huán)境中才可能被訪問到,只要有一個黃靜有可能被訪問到,它就不會被銷毀,所以閉包由延續(xù)變量的作用

閉包的使用場景

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
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容