javascript笔记(JavaScript_Core电子书)-闭包

/**
 * 闭包:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”
 */
 
function addx(x) {
 return function(y) {return x+y;};
}
add8 = addx(8);
add9 = addx(9);
//alert(add8(100));
//alert(add9(100));

//闭包的应用
//1、在内存中维持一个变量
//如上例,x是函数addx的私有变量,本应该在函数执行完就回收掉。但是由于闭包的存在,add8对象依然可以使用x。
//2、提供访问函数的私有变量的安全途径(面向对象的封装)
function obj(){
var name = "default";
return {getName:function(){return name},
setName:function(pName){name = pName}
}
}
var o1 = new obj();
//alert(o1.getName());
o1.setName("change");
//alert(o1.getName());

//闭包注意的地方
//1、内存泄露(对象A引用B,B引用C,C又引用A)
//2、闭包中的this上下文引用
var name = "The Window";
var object1={
name:"My Object1",
getNameFunc:function(){
return function(){return this.name};
}
}
var object2 ={
name:"My Object2",
getNameFunc:function(){
var that = this;
return function(){return that.name};
}
}
alert(object1.getNameFunc()());//The Window
alert(object2.getNameFunc()());//My Object2

转载于:https://my.oschina.net/u/150107/blog/56971

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值