0
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才对啊...
请问是什么问题

2018-10-05 提问
5 个回答
0

已采纳

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

3

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

0

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

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

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

0

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

撰写答案

推广链接