美文网首页
定时器中的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指向

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