美文网首页
定时器中的this指向

定时器中的this指向

作者: JasonQiao | 来源:发表于2016-09-08 14:24 被阅读215次

先进一段JS代码

function aa(){
}
aa.prototype.init=function(){
  setTimeout(this.init,1000);
  console.log(1);
}
new aa().init();

问题来了:为什么这里的console.log(1)只有执行了两次?

第一次是首次调用函数时输出的,在第二次的时候 setTimeout 中的 this.init 由于脱离了 aa 类所以this的指向发生了变化(指向window或global),所以第二次的 setTimeout 是失败的,但是第二次的 console 是成功的。所以总共有两次。

如果想要一直循环的话可以使用 setTimeout(this.init.bind(this), 1000);将 this.init 中的 this 绑定到 aa 上就可以保证每次都能定位到是 aa.init 了。

function aa(){
}
aa.prototype.init=function(){
  var _this=this;
    setTimeout(function(){
      _this.init();
    },1000);
    console.log(2);
  }
new aa().init();

直接调用函数和setTimeout中隔0秒执行有什么区别

setTimeout的第二个参数如果省略则立即调用

相关文章

  • This的指向总结

    1、//定时器中this的指向 结论:如果由定时器调用执行了某个函数,函数中有this,则这个this指向wind...

  • 函数中的this

    一,普通函数中的this指向,二,定时器方法中的this指向,三,构造函数中的this指向,四,对象方法中的thi...

  • JS中this的指向

    1、普通函数中this的指向( 普通函数中的this指针指向于调用者) 2、定时器中的this的指向 3、在对象...

  • aa.this的指向

    1. 普通函数中的this指向 普通函数this指向global也就是window 2. 定时器方法中的this指...

  • 定时器中的this指向

    先进一段JS代码 问题来了:为什么这里的console.log(1)只有执行了两次? 第一次是首次调用函数时输出的...

  • js中this的指向

    哪个对象调用函数,函数中的this指向那个对象 总结遇到的this指向的情况,直接上结论: 1.定时器,延时器中 ...

  • Javascript定时器中的this指向

    使用js中的定时器(setInterval,setTimeout),很容易会遇到this指向的问题。例如:var ...

  • 定时器中this的指向问题

    setInterval和setTimeout中如果出现this,那么这个this指向的是window对象,解决方法...

  • js之call() apply() bind() $proxy(

    关于this的使用 先贴一段代码 上述函数中this是定义在setTimeout定时器函数内部,所以this指向w...

  • 浅谈this

    在普通函数中,this指向它的直接调用者;如果找不到直接调用者,则是window: 匿名函数,定时器中的函数,由于...

网友评论

      本文标题:定时器中的this指向

      本文链接:https://www.haomeiwen.com/subject/xbvsettx.html