所谓的闭包,就是一个函数中定义的变量,在函数内部通过return将这个函数中定义的变量返回出去到外部供给给其他的函数方法调用,由于该变量是只存在于定义的函数中,故而又在函数内部通过return返回到外部从而达到外部函数使用定义在函数内部的变量的目的,我们就称之为闭包,当然,当其调用定义的那个函数时,这时,函数内部的变量就存在于函数内部了,return出去的就能在外部使用该变量,由于这个闭包中的变量能供给给其他,故而该变量会一直存在于栈中,所以说人们常说在使用闭包时过多的使用会导致性能问题,就是因为所有的闭包中定义的return出去的变量都会存在于内存中,从而导致性能为题,当然,我们可以通过手动释放内存,比如,
function a(){ let i = 0; return function(){ return i++; } i=null; } r = a(); console.log(r()); console.log(r()); console.log(r());
注意,这就是一个典型的闭包,一旦执行了函数a,期间return的i就是在函数a中定义的变量,由于return了该变量,故而变量name会一直存在于内存中,比如我们可以通过let r= a();然后通过r()来获取到定义在a中的变量i;我们可以通过i= null来释放对i的医用,一旦a函数不在被引用,js的垃圾回收机制会自动的回收掉这些无用的资源
百度已收录
无聊前端之瞎谈闭包:等您坐沙发呢!