闭包特性:
(1)封闭性 --> 外界无法访问闭包内部的数据
(2)持久性 --> 对于一般函数,在调用完毕之后,系统会自动注销函数。
对于闭包函数,在外部系统被调用之后,闭包结构依然保存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用。
/*函数体内定义两个变量,分别存储参数和闭包结构。闭包结构中寄存着参数值。
调用函数f之后,函数结构被注销,它的局部变量也随之被注销,因此变量a中存储的参数值也随之丢失。(外部函数返回后会自动销毁,内部的结构,标识符,数据也会随之丢失)但是
变量b存储着闭包结构,因此闭包结构内部的参数没有被释放出来。在调用参数后,依然能从闭包结构中读取到参数值*/
function f(x){
var a = x ;
var b = function(){
return a;
};
a++; // 自加后,把这个值传递给对象属性a,内部函数动态保持与局部变量a的联系,同时更新自己内部调用变量的值。
return b;
}
var c = f( 5 ); // 调用外部函数,并赋值
console.log(
c()
); // 调用外部函数,返回外部函数更新后的值
// 闭包函数包含以下标识符:
// 函数参数(形参变量) 、arguments属性、局部变量、内部函数名、this(指闭包函数自身)
// this --> 局部变量
--> 形参
--> arguments
--> 函数名