猿问

为什么输出的是 [circular object global] ?

var i=0;var t={
  a:function(){    this.timer=setInterval(this.b,30);
  },
  b:function(){    if(i++<1){
      console.log(this);
    }
  }
};
t.a();
慕尼黑的夜晚无繁华
浏览 116回答 2
2回答

桃花长相依

输出的内容来自console.log(this);而此处的this自然是全局的this咯。你把t.b作为参数传给了setInterval,传进去的就仅仅是t.b这个函数。也就是说相当于var&nbsp;func&nbsp;=&nbsp;t.b;setInterval(func,&nbsp;30);之后调用时也就相当于每30毫秒执行一次func();那么this当然是未有指定的如果你希望那个this指代的是t,那么就可以setInterval(this.b.bind(this), 30)或者为了方便你理解原理,如果你希望this指代的是t,你可以var&nbsp;func&nbsp;=&nbsp;function()&nbsp;{&nbsp;t.b();&nbsp;} setInterval(func,&nbsp;30);

红糖糍粑

上面说的对,补充下bind不一定全部兼容,用apply/call做实例会好一点setInterval(this.b.apply(this),&nbsp;30);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答