zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【操作系统】第九章 虚拟内存
    【计网】第七章
    信息安全数学基础整理笔记
    深入浅出数据分析 笔记总结
    ERROR: Error cloning remote repo 'origin'
    Docker 操作
    centos 安装 git
    CentOS 7 安装 JAVA环境(JDK 1.8)
    如何删除 容器里的软件(彻底)
    Docker 部署 Jenkins :通过SSH配置Linux宿主机为slave节点,运行外部环境
  • 原文地址:https://www.cnblogs.com/zhmt/p/2370281.html
Copyright © 2011-2022 走看看