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>

 

  

  

 

posted @ 2012-02-27 19:04  清晨の雨露  阅读(213)  评论(0编辑  收藏  举报