首页 新闻 会员 周边

javascript setTimeout定时器不起作用

0
悬赏园豆:5 [已解决问题] 解决于 2015-07-08 15:09
 1 function count(start, end) {
 2                 var objTimer =new Object();
 3                 var timeNumber = start;
 4                 objTimer.mytimer = setInterval(addNumber, 100);
 5 
 6                 function addNumber() {
 7                     if (timeNumber <= end) {
 8                         console.log(timeNumber);
 9                         timeNumber++;
10                     }
11                     else {
12                         timeNumber = start;
13                     }
14                 }
15                 objTimer.cancel = function () {
16                   clearInterval(this.mytimer);
17                 }
18                 return objTimer;
19             }
20             var ss=count(1,50);
21             setTimeout(ss.cancel(), 500);
View Code

上面的代码,不知道是什么原因,不执行,把 “ setTimeout(ss.cancel(), 500);”去掉是可以执行的,加上后就不可以执行了,大家帮忙看下~~~~~

天空的天的主页 天空的天 | 初学一级 | 园豆:192
提问于:2015-07-08 11:57
< >
分享
最佳答案
1

还有clearInterval(this.mytimer);改为clearInterval(objTimer.mytimer);

收获园豆:3
liqipeng | 小虾三级 |园豆:1160 | 2015-07-08 12:12

麻烦问下 this不就是指当前调用的对象objTimer吗,在这里不是等价的吗,请教一下

天空的天 | 园豆:192 (初学一级) | 2015-07-08 14:43

@天空的天: 不是!this是个复杂问题,不是三两句说的清楚的,搜索一下多看几篇this的资料,试着理解this,理解了this基本上JS就上了一个档次。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-08 15:00

@liqipeng: 非常感谢 回头好好看看 this的用法

天空的天 | 园豆:192 (初学一级) | 2015-07-08 15:04

@天空的天: 说下次数的问题。你设置的interval是100,所以理想状况500毫秒可以执行5次,不是10次。但是js执行环境为单线程,可能其他任务的执行或者任务的切换,导致这个时间会超出100毫秒,所以实际执行4次就完了。可能给500毫秒加几毫秒就能执行5次了

liqipeng | 园豆:1160 (小虾三级) | 2015-07-08 15:11

@liqipeng: 对 理想是5次  写错了 ,多谢解释

天空的天 | 园豆:192 (初学一级) | 2015-07-08 15:14
其他回答(4)
0

按过F12吗?

吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-08 11:59

用debug 调试过,没有效果,不知道是什么问题

支持(0) 反对(0) 天空的天 | 园豆:192 (初学一级) | 2015-07-08 12:01
0

写法错误。setTimeout("ss.cancel()", 500);

幻天芒 | 园豆:37175 (高人七级) | 2015-07-08 12:06
0

把setTimeout(ss.cancel(), 500);改成 setTimeout(ss.cancel, 500);

你那样写在调用setTimeout时ss.cancel已经被执行了!

junjieok | 园豆:779 (小虾三级) | 2015-07-08 12:40
0

setTimeout("ss.cancel()", 500); or setTimeout(ss.cancel, 500);

 clearInterval(objTimer.mytimer);

收获园豆:2
芝芝07 | 园豆:365 (菜鸟二级) | 2015-07-08 13:30

谢谢,按照你的修改后的 确实可以执行了 ,为什么只是执行了四次,“ var ss=count(1,50);
            setTimeout(ss.cancel, 500);” 500毫秒后才清理定时器,那么计数的不是应该恰好执行10次吗,如上图所示

支持(0) 反对(0) 天空的天 | 园豆:192 (初学一级) | 2015-07-08 14:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册