js闭包
首先,先理解js的变量的作用域。变量的作用域分为全局变量和局部变量。
js的语言的特殊之处是函数内部能访问全局变量。
如js代码
var j=99; function f1(){ alert(n); } f1();//99;
当然,函数外部不能访问函数内部的局部变量。
function f1(){ alert(n); } alert(n);//error
为了访问函数内部的变量,就需要在函数外部再套一个函数,如上面代码中f1函数外部再套一个f2函数,只要f2的返回值是f1,这样就能访问f1内部的变量了。
function f2(){ n=999; function f1(){ alert(n); } return f1; } var result=f2(); result(); // 999
上面的f1函数就是一个闭包。因此可以把闭包简单理解成“定义在一个函数内部的函数”。
闭包的用途有:它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
以下是我写的js代码(实现产生1~n之间的两个随机数,后一个不能和前一个一样):
View Code
1 <script type="text/javascript">
2 function random_out(n)
3 {
4 this.r_num_1 =null;
5 function random_in(){
6
7 //产生1~n之间的随机整数 var r_num_2=Math.floor(n*Math.random());
8 if(r_num_1 ==r_num_2)
9 random_in();
10 else
11 document.write("第二个数:"+r_num_2);
12 }
13 return random_in();
14 }
15 var a = random_out(4);
16 a();
17 </script>
清晨の雨露:One step one footprint