对JS闭包的一点浅显的认识
闭包的主要作用就是实现在函数外部进行对函数内部的变量的调用。
我们都知道,JS同大部分编程语言类似,在函数内部声明的变量,其作用域一般情况下仅在其自身,函数外部是不能正常访问到其内部变量的。
如:function test(){
var a=2;
}
alert(a); //这段代码无法执行。
若要想访问到此变量a,则需要通过定义闭包的形式。闭包的使用主要是有2种方法,一种是在函数(或对象)内部声明一个子函数,赋值给一个全局变量,在外部调用此全局变量从而达到调用这个子函数:
function test1(){
var a1=2;
getmessage = function(){
a1+=1;
alert(a1);
}
}
getmessage(); //输出结果为3
或者: function test2(){
var a2=2;
function getmessage1(){
a2+=1;
alert(a2);
}
return getmessage1;
}
var get =test2();
get(); //输出结果为3;
闭包必须通过函数调用的形式建立一个变量获取通道,如果只传递变量,则无法起到闭包的效果,如:
function test3(){
var a3=2;
getmes =function(){
a3+=1;
}
return a3;
}
getmes();//a3自加
alert(test3());//输出结果为2;因为函数返回值是一个变量,而非函数;
如果这样写,则可以获取到a3的值:
function test3(){
var a3=2;
getmes =function(){
a3+=1;
}
function returnvalue(){
return a3;
}
return returnvalue;
}
getmes();//a3自加
var getvalue=test3();
alert(getvalue());//输出结果为3。因为返回的是函数形式。尽管和上一个函数都是返回a3的值,但其返回的方式不同(闭包形式和变量形式),所得到的结果也不同,这就是闭包。