• 闭包练习题


    1、

    var a = 10
    function foo(){
        console.log(a)
    }
    
    function sum() {
        var a = 20
        foo()
    }
    
    sum()
    /* 输出
        10
    /

    函数 foo() 是在全局下创建的,所以 a 的上级作用域就是 window,输出就是 10

    2、

    var n = 10
    function fn(){
        var n =20
        function f() {
           n++;
           console.log(n)
         }
        f()
        return f
    }
    
    var x = fn()
    x()
    x()
    console.log(n)
    /* 输出
    *  21
        22
        23
        10
    /

    思路:fn 的返回值是什么变量 x 就是什么,这里 fn 的返回值是函数名 f 也就是 f 的堆内存地址,x() 也就是执行的是函数 f(),而不是 fn(),输出的结果显而易见

    3、

     // 全局变量
          var x = 1;
          //   对象
          var obj = {
            x: 2,
          };
          //
          obj.fn = (function (x) {
            this.x *= x++; //x++   先返回原值 参加运算  后自++
            return function (y) {
              x += y;
              this.x *= ++x; //++x   变量先自加1参加运算  后 返回值
              console.log(x);
            };
          })(obj.x);
          //
          var fn = obj.fn;//自执行函数  返回的函数
          obj.fn(2); //6          //调用 返回的函数 obj调用  this指向obj
          fn(1); //8   //调用返回的函数  全局变量fn调用   this指向window
          console.log(obj.x, x);//12  16
  • 相关阅读:
    2009中国IT界名人
    jQuery简介
    Spring下载地址
    ContextLoaderListener
    MyBatisUtil类
    SSM事务
    后台管理中心跳转问题解决
    mybatis返回boolean值时数据库返回null
    yarn作业提交过程
    Hadoop集群运行wordcount jar包出错
  • 原文地址:https://www.cnblogs.com/ndh074512/p/14778647.html
Copyright © 2020-2023  润新知