闭包的概念闭包
什么是闭包呢? 闭包(Closure),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即便已经离开了创造它的环境也不例外。因此,有另外一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。函数
其实js中,每一个函数就是一个闭包。函数和本身的内部定义的变量绑定在一块,组合成的实体就是闭包。只不过在特殊的状况下,即便函数执行完成了,因为某些缘由致使函数内部的变量仍然被外界所引用,因此垃圾回收并不释放函数相关的全部内容,并且将函数和必要的变量组成一个闭包的实体,不释放,直到没有外界变量再指向当前的函数的内部的变量那么闭包就会释放掉。this
闭包的实例get
例1:it
function Persion() {
var t = {};
t.name = "itcast";
t.age = 19;
return t;
}io
var p = new Persion();
p.age;console
function Persion() {
var ageProp = 19;
var nameProp = "flydragon";
var phone = "110"; //私有变量
function getPhone() { //定义属性 get 方法
return phone;
}ast
function setPhone( value ){ //定义属性 set 方法
phone = value || "";
}function
var showFun = function() {
console.log( nameProp + " " + ageProp );
};变量
return {
age : ageProp,
name : nameProp,
show : showFun,
get_phone : getPhone,
set_phone : setPhone
};
}
var p = new Persion();
p.show();
console.log( p.get_phone() );
例2:如何让嵌套函数的父函数访问子函数的内部变量?
function father() {
his.get_age = child();
function child() {
var child_value = "child";
return function() {
return child_value;
}
}
}
var f = new father();
//子函数的早已经执行完毕,可是还能访问到子函数内部的变量值。
f.get_age();
例3:全局变量(或者外部变量)
function father() {
var get_value ;
function child() {
var child_value = 199;
get_value = function() {
return child_value;
}
}
return {
get : get_value;
}
}
var f = new father();
f.get();
例4:
function father() {
this.f_name = "fater";
this.childAge = child();
function child() {
var c_age = 19; //私有变量
return {
set_age : function ( value ) {
c_age = value;
},
get_age : function () {
return c_age;
}
}
}
}
var f = new father(); f.childAge.set_age(188); console.log( f.childAge.get_age() );