对JS闭包的一点浅显的认识

jopen 11年前

闭包的主要作用就是实现在函数外部进行对函数内部的变量的调用。

我们都知道,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的值,但其返回的方式不同(闭包形式和变量形式),所得到的结果也不同,这就是闭包。