this指向的问题

var a=11
function test1(){
  this.a=22;
  let b=function(){
    console.log(this.a);
  };
  b();
}
var x=new test1(); //11 

这个函数我的理解是,this不是指向调用环境中值吗。所以b函数应该在test1里调用,应该是22才对啊...
请问是什么问题

阅读 2.6k
5 个回答

首先是new调用,所以第一个this指向new出来的对象,第二个this属于直接调用,指向全局变量window或者global
可以参考: https://segmentfault.com/a/11...

console.log(this.a);是在匿名函数b里执行的,指向window(严格模式下指向 undefined

this指向调用者或者window啊,换成箭头函数是你想要得样子

var a=11
function test1(){
  this.a=22;
  var b=()=>{
    console.log(this.a);
  };
  b();
}

兄弟虽然你是let声明,但是你调用的时候相当于还是window调用的所以是11,如果真想改的话可以用call或者apply去改变下this指向。

this指向要看函数执行时的位置,有没有显示或者隐式的绑定,不然采取默认window
解决办法:显示绑定一下b.call(this);,或者采用箭头函数

推荐问题
宣传栏