• 闭包all


    1.0 定义:有权访问另一个函数作用域内变量的函数都是闭包。

    2.0 Js语言特殊之处在于函数内部可以直接读取全局变量

    <script type="text/javascript">
    var n=100;
    function parent(){
      alert(n);
    }
    parent();//100
    < /script>

    3.0在函数外部无法读取函数内的局部变量

    <script type="text/javascript">
    function parent(){
      var m=50;
    }
    parent();
    alert(m);//报错 m未定义
    </script>

    3.1 注意函数内部声明变量时一定要加var,否则就声明了一个全局变量

    function parent(){
    m=50;
    }
    parent();
    alert(m);//50

    4.0 闭包的作用有2个:
    一是前面提到的读取函数内部的变量,
    二是让这些变量的值保存在内存中,实现数据共享

    5.0

    <script type="text/javascript">
    function parent(){
       var m=50;
       function son(){
            alert(m);
       }
       return son;
    }
    var s=parent();//将结果保存在全局里
    s();//50
    < /script>

    son函数就是闭包。

    6.0 例子

    <script type="text/javascript">
    var cnt=(function(){
        var i=0;
        return function(){
            alert(i);
            i++;
        }
    })();
    cnt();//0
    cnt();//1
    cnt();//2
    cnt();//3

    </script>

    把匿名函数的执行结果(即对里面子函数的声明赋给全局变量cut),i就保存在内存里了
    执行cut()时就直接从内存取值了,i只有cnt()函数才能调用,直接alert(i)是不行的

    7.0var cnt=(function(num){
    return function(){
        alert(num);
        num++;
      }
    })(5);
    cnt();//5
    cnt();//6
    cnt();//7
    //当然还可以调用时传参
    var cnt=(function(){
        var i=0;
    return function(num){
        num+=i;
        alert(num);
        i++;
      }
    })();
    cnt(1);//1
    cnt(2);//3
    cnt(3);//5

    8.0

    <script type="text/javascript">
    function box(){
    var arr=[];
    for(i=0;i<5;i++){
    arr=function(){return i;}
    }
    return arr;
    }
    var a=box();

    alert(a);
    alert(typeof a);//function
    alert(a());
    </script>

    弹出的函数体
    function(){return i;}    }
    最后这个i是4,之后++成为5

  • 相关阅读:
    contab的使用方法
    mitmproxy安装与使用
    centos安装docker
    Linux安装python3.6
    Appium 教您完美win10安装Appium1.7.2支持win客户端自动化
    解决Git建立远程分支关联时fatal the current branch master has no upstream branch 问题
    git 命令上传远程服务器步骤
    robot打开浏览器WebDriverException: Message: WebDriver:NewSession
    jmeter线程组之间数据共享设置
    缓存的那些事
  • 原文地址:https://www.cnblogs.com/lieaiwen/p/8385557.html
Copyright © 2020-2023  润新知