闭包 构成 理解
闭包是由什么构成?
闭包=函数+词法作用域
词法作用域:即以变量声明定义的位置为参照,如果当前位置没有定义,就会访问父级定义的位置
1你说一下对闭包的理解?
1.闭包是一个可以访问另一个函数内部变量的函数
2.一般的函数在使用完后,内部的变量会被回收,而闭包不会,变量依旧存在于内存中,不会消失。
3.频繁的使用闭包会占用内存,降低CPU性能,但是可以释放内存(在使用完闭包后,手动使变量为null)
2.闭包应用场景和实现
应用场景 求和,设置字号,循环表单
实现
求和
function makeAdd(x) {
return function(y) {
return x+y
}
}
设置字号
function setFontSize(size) {
return function() {
document.body.style.fontSize=size+"px"
}
}
循环表单
function makeHelp(help) {
return function() {
console.log(help)
document.querySelector('.help').innerHTML=help
}
}
3.闭包的优点以及缺点
优点:1:变量长期驻扎在内存中; 2:不污染全局变量; 3:私有成员的存在 ; 缺点: 1.内存消耗很大 2.在IE中可能导致内存泄露
4. 具体实现
闭包函数 实现方法1
function test(r){
this.r=r
}
test.pi=3.14
test.prototype.area=function(){
return test.pi * this.r * this.r
}
闭包函数 实现方法2
var test2=function(){
var obj=new Object();
obj.pi=3.14;
obj.area=function(r){
return this.pi*r*r;
}
return obj;
}
var i=new test2;
console.log(i.area(8))