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

posted @ 2017-07-20 10:55  gq_orange  阅读(157)  评论(0编辑  收藏  举报