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);
上面的代码,不知道是什么原因,不执行,把 “ setTimeout(ss.cancel(), 500);”去掉是可以执行的,加上后就不可以执行了,大家帮忙看下~~~~~
还有clearInterval(this.mytimer);改为clearInterval(objTimer.mytimer);
麻烦问下 this不就是指当前调用的对象objTimer吗,在这里不是等价的吗,请教一下
@天空的天: 不是!this是个复杂问题,不是三两句说的清楚的,搜索一下多看几篇this的资料,试着理解this,理解了this基本上JS就上了一个档次。
@liqipeng: 非常感谢 回头好好看看 this的用法
@天空的天: 说下次数的问题。你设置的interval是100,所以理想状况500毫秒可以执行5次,不是10次。但是js执行环境为单线程,可能其他任务的执行或者任务的切换,导致这个时间会超出100毫秒,所以实际执行4次就完了。可能给500毫秒加几毫秒就能执行5次了
@liqipeng: 对 理想是5次 写错了 ,多谢解释
按过F12吗?
用debug 调试过,没有效果,不知道是什么问题
写法错误。setTimeout("ss.cancel()", 500);
把setTimeout(ss.cancel(), 500);改成 setTimeout(ss.cancel, 500);
你那样写在调用setTimeout时ss.cancel已经被执行了!
setTimeout("ss.cancel()", 500); or setTimeout(ss.cancel, 500);
clearInterval(objTimer.mytimer);
谢谢,按照你的修改后的 确实可以执行了 ,为什么只是执行了四次,“ var ss=count(1,50);
setTimeout(ss.cancel, 500);” 500毫秒后才清理定时器,那么计数的不是应该恰好执行10次吗,如上图所示