在刚接触JS面向对象得时候,对闭包是真的不理解,但是在经过多次的查看资料后终于对闭包这个东西有了简单的认识和运用。
首先闭包是指一个函数调用了除其自身以外的变量的时候,就会形成一个闭包。(基本上都是一个子函数去调用它的父函数中的同级变量)
闭包的原理:在浏览器执行的时候,解释器会去检测,子函数是否引用了除其自身以外的变量,若引用就会形成一个闭包(也可以叫安全气泡)。此时,外部的函数就不能引用安全气泡里的变量。
闭包的作用:1:可以防止变量污染;2:能够实现缓存;3:在封装插件的时候用。
副作用:最主要的就是会造成内存泄漏(内存泄漏是指内存不能被释放,造成内存空间不足。内存溢出是程序在申请内存时,没有足够的空间使用)。想回收变量的话,应把全局变量的指向清空。
案例:
var i=1;
function count(n){
i *=n;
return count;
}
count.tostring = function(){
return i;
}
alert(count(2)(3)(5)); //输出30