码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-11-19 20:42:20      阅读:423      评论:0      收藏:0      [点我收藏+]

标签:cti   题解   monit   his   http   int   为什么   win   log   

我们在某个作用域内或者在自己定义的一个类里调用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(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下的运行结果如下图:

技术分享
这个时候this.name变量被正确打印出来了。
问题解决了,问题也来了,为什么这么改就好了呢?后面再更新blog说明原因。
 

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

标签:cti   题解   monit   his   http   int   为什么   win   log   

原文地址:http://www.cnblogs.com/yikezhuixun/p/6081189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!