zoukankan      html  css  js  c++  java
  • 闭包练习题

    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
  • 相关阅读:
    Socket listen 简要分析
    Socket connect 等简要分析
    HIVE函数大全
    元数据管理
    flume
    shell编程
    数据仓库集锦
    数据库知识
    hive sql 转化mapreduce原理
    Hadoop 学习笔记
  • 原文地址:https://www.cnblogs.com/ndh074512/p/14778647.html
Copyright © 2011-2022 走看看