为了账号安全,请及时绑定邮箱和手机立即绑定

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

为什么输出的是 [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();
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

输出的内容来自console.log(this);

而此处的this自然是全局的this咯。

你把t.b作为参数传给了setInterval,传进去的就仅仅是t.b这个函数。也就是说相当于

var func = t.b;setInterval(func, 30);

之后调用时也就相当于每30毫秒执行一次func();

那么this当然是未有指定的


如果你希望那个this指代的是t,那么就可以setInterval(this.b.bind(this), 30)


或者为了方便你理解原理,如果你希望this指代的是t,你可以

var func = function() { t.b(); }
setInterval(func, 30);
查看完整回答
反对 回复 2023-05-06
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

上面说的对,补充下bind不一定全部兼容,用apply/call做实例会好一点

setInterval(this.b.apply(this), 30);

//img1.sycdn.imooc.com//645621b900015c1503820180.jpg

查看完整回答
反对 回复 2023-05-06
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信