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

你可能感兴趣的:(js闭包)