js中的this指向问题和几道练习题

this规则


1.函数预编译过程,this指向window

var a = 5;
function test(){
    a=0;
    console.log(a);
    console.log(this.a);
    var a;
    console.log(a);
}
test();
console.log("---------------")
new test();
  • 答案
0
5
0
---------------
0
undefined
0
  • 解析

运行函数前,进行预编译。
1.test()时:

  GO:{
      a:5,
      test:function test
      this:window
  }
  AO:{
      a:0
  }
//执行test();时,this指向window

1.new test()时:

  GO:{
      a:5,
      test:function test
      
  }
  AO:{
      this:{}
      a:0
  }
//执行new test();时,AO会在后台生成this对象,所以this指向ao本身

2.全局作用域里,this指向window

3.call和apply可以改变this指向,区别时参数列表不一样。

4. obj.fun(); fun里的this指向obj。

 var obj = {
     a: function () {
         console.log(this.name)
     },
     name: 'aaabb'
 }
 obj.a();//aaabb
var name = "222"
var a = {
    name: "111",
    say: function () {
        console.log(this.name);
    }
}
var fun = a.say;
fun()//222;fun中的this指向window
a.say()//111;this指向a
var b = {
    name: "333",
    say: function (fun) {
        //this--->b
        
        fun();
        //运行fun()
        //但是不是this.fun()...是外面的那个fun
       
    }
}
b.say(a.say);//222 
b.say = a.say;
b.say();//333

如果搞懂了这题,就没多大问题了。

你可能感兴趣的:(js中的this指向问题和几道练习题)