先进一段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();