zoukankan      html  css  js  c++  java
  • this指向问题

     1 // 考察:this指向
     2 // 自执行函数有参数传递
     3 var num = 10;   //全局作用域的num=10
     4 var obj = {
     5     num: 40,    //对象obj中的num=20
     6     fn: (function (num) {  //自执行函数,函数参数值传递,传入的参数num为全局作用域中的num=10的副本
     7         this.num *= 2;     //全局变量num,window.num*=2  全局的num变成20
     8         alert(this.num);   //20
     9         num += 100;         //这里的num为自执行函数传入的参数,10+100=110,num=110
    10         alert(num);           //110
    11         return function () {  //这里形成闭包 this根据调用函数对象确定
    12             alert(this);     //(fn()执行时this指向window, obj.fn()执行时this指向obj)
    13             this.num *= 3;   //  this.num   
    14             num += 1;        // 上级函数作用域中的num
    15             console.log(num);
    16             console.log(this.num);
    17         }
    18     })(num)  //参数,值传递,传入的参数为全局作用域中的num=10
    19 };
    20 var fn = obj.fn;  //把obj.fn赋值给fn
    21 fn();           //这里执行的程序是obj对象fn方法 this->window   //111  60
    22 obj.fn();       //这里也是执行obj对象fn方法,this->obj         //112  120
    23 console.log(window.num);  //60
    24 console.log(obj.num);     //120
    25 console.log(this.num);    //60  this->window
     1 // 考察:this指向
     2 // 自执行函数无参数传递
     3 var num = 1;    //全局作用域的num=1
     4 var obj = {
     5     num: 2,     //对象obj中的num=2
     6     fn: (function(){      //自执行函数
     7          this.num += 10;  //全局变量num,this->window, window.num*=2  全局的num变成20
     8          num = num + 10;  //这里的 num 虽然在下面声明了,但却没有初始化,因此执行完后是NaN
     9          var num = 3;     //变量提升,在这里赋值为3
    10          return function(){  //这里形成闭包 this根据调用函数对象确定  
    11              //(fn()执行时this指向window, obj.fn()执行时this指向obj)
    12              this.num += 10; 
    13              num++;   //上级函数作用域中的num(num=3)
    14              console.log(num);
    15              console.log(this.num);
    16      }
    17     })()
    18 };
    19 var fn = obj.fn;
    20 
    21 fn();                //结果为4  21
    22 obj.fn();            //结果为5  12
    23 console.log(num);    //结果为21
    24 console.log(obj.num);//结果为12

     参考:http://www.imooc.com/qadetail/161604?t=227246

          https://www.zhihu.com/question/49789706

       https://zhidao.baidu.com/question/2270540468949188628.html

  • 相关阅读:
    BZOJ 3529 数表
    BZOJ 3832 Rally
    BZOJ 1086 王室联邦
    BZOJ 2738 矩阵乘法
    2656565
    小L的区间求和
    小L的直线
    Co-prime 杭电4135
    POJ 跳蚤
    B
  • 原文地址:https://www.cnblogs.com/guorange/p/7210023.html
Copyright © 2011-2022 走看看