javascript使用setTimeout、setInterval时找不到变量的问题

咱们在某个做用域内或者在本身定义的一个类里调用setTimeout、setInterval会常常会遇到找不到某个变量的错误。
好比下面这个例子:
 
window.onload = function(){
    manager.init();
};

var manager = {
    init: function() {
        slef = this;
        this.name = "manager";
        setInterval(this.timerMonitor, 1000);
    },
    
    timerMonitor: function(){
        console.log(this.name);
    }
}
咱们来看下chrome下的运行结果:
并无按预想打印manager。由于this.name这个变量是undefined状态。
为何是这样的结果,由于setInterval是window对象的方法,这是个全局的方法,console.log里的this这个时候指向的应该是window对象,咱们能够来调试一下。
 
在console.log这行打上断点:
咱们能够看到这个时候的this确实是指向window对象的。
 
 
 
那么怎么解决这个问题呢?使用匿名函数就能够了
只须要把setInterval(timerMonitor, 1000);改成setInterval(function(){self.timerMonitor()}, 1000);就能够了。
完整代码以下:
window.onload = function(){
    manager.init();
};

var manager = {
    init: function() {
        self=this;
        this.name = "manager";
        setInterval(function(){self.timerMonitor()}, 1000);
    },
    
    timerMonitor: function(){
        console.log(this.name);
    }
}

再来看Chrome下的运行结果以下图:chrome

这个时候this.name变量被正确打印出来了。
相关文章
相关标签/搜索