一,什么是闭包?
闭包的定义:闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
闭包=内层函数+引用的外层函数变量。
二,闭包的特点
1.让外部访问函数内部变量变成可能
2.变量会常驻在内存中
3.可以避免使用全局变量,防止全局变量污染;
三,闭包的好处
1.隔离作用域,保护私有变量;
2.让我们可以使用回调,操作其他函数内部;
3.变量长期驻扎在内存中,不会被内存回收机制回收,即延长变量的生命周期;
四、闭包的坏处
内层函数引用外层函数变量,内层函数占用内存。如果不释放内存,过多时,易引起内存泄露。
五,闭包的写法和用法
1,
function arr(r) {
this.r=r
}
arr.PI=3.1415926;
arr.prototype.area=function(){
return arr.PI*this.r*this.r
}
var c=new arr(1.0)
console.log(c.area());
//返回值 3.1415926
2,常用
var brr=function(){
var obj=new Object();
obj.PI=333.333
obj.area = function(b){
return this.PI * r * r
}
return obj
}
var c= new brr();
console.log(c.area(1.0))
3,
var crr=new Object();
crr.PI=66.66
crr.Area=function(a){
return this.PI * a * a
}
console.log(crr.Area(1.0));
//返回值 66.66
4,常用
var drr={
"PI": 88.88,
"area":function(q){
return this.PI * q * q
}
}
console.log(drr.area(1.0));
//返回 88.88
5,不常用
var Circle=new Function("this.PI=3.14159;this.area=function(r){ return r*r*this.PI;}")
console.log((new Circle()).area(1.0));
//返回值 3.14159
六,总结
1.闭包其实是在函数内部定义—个函数。
2.闭包在使用的时候不会释放外部的引用,闭包函数内部的值会得到保留。
3.闭包里面的匿名函数,读取变量的顺序,先读取本地变量,再读取父函数的局部变量。
4.对于闭包外部无法引用它内部的变量,因此在函数内部创建的变量执行完后会立刻释放资源,不污染全局对象。
5.闭包使用的时候要考虑到内存泄漏,因为不释放外部用,但是合理的使用闭包是内存使用不是内存泄漏。