循环调用 setTimeout 要不要注销,不注销会不会产生性能问题

rd16 2014-09-24 12:09:03
  var start = 10;
var step = -1;
var timeid;
function count_sj() {
// alert(timeid);
$("#spid").text(start);
start += step;
if (start < 0) {
//调用其它函数
start = 10;
}
timeid=setTimeout("count_sj()", 1000);
}



上面代码从10开始倒计时,倒计时到0后又重新从10倒计时。

我们可以看到timeid每秒都变一个。这样是不是等级上个 setTimeout 没有注销又从新开了一个 setTimeout。
...全文
1109 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhishiheng 2014-09-25
  • 打赏
  • 举报
回复
死循环 连个结束条件都没有
KK3K2005 2014-09-25
  • 打赏
  • 举报
回复
引用 2 楼 rd16 的回复:
[quote=引用 1 楼 u011751266 的回复:] setTimeout运行结束后就没了 setInterval的话需要考虑这个问题
哥们,你看上面的代码,它在自己调用自己,所以运行一直是没有结束的。 上个setTimeout没有结束就开始新的setTimeout了,不知道浏览器会不会自动注销上一个setTimeout啊????[/quote] settimeout 执行了就注销了 只是里面实际调用的函数 的释放就看又被有被 闭包引用 每次执行settimeout 系统就会 挂起一个settimeout中指定的 function 等待执行 js运行环境 本身就是一串 function 在哪里依次等待执行
jennis19118 2014-09-24
  • 打赏
  • 举报
回复
setTimeout运行结束后就没了 setInterval的话需要考虑这个问题
jennis19118 2014-09-24
  • 打赏
  • 举报
回复
引用 2 楼 rd16 的回复:
[quote=引用 1 楼 u011751266 的回复:] setTimeout运行结束后就没了 setInterval的话需要考虑这个问题
哥们,你看上面的代码,它在自己调用自己,所以运行一直是没有结束的。 上个setTimeout没有结束就开始新的setTimeout了,不知道浏览器会不会自动注销上一个setTimeout啊????[/quote] 你逻辑混乱啊。 跟你讲一下运行流程: 首先你调用一次count_sj(人为调用)。 然后运行到代码第12行。设置一个定时器,让count_sj这个方法在1000毫秒之后被执行一次。 过了1000毫秒,count_sj这个方法被调用了,然后又运行到第12行,再设置一个定时器,过1000毫秒再调用一次count_sj。 这个时候之前的count_sj已经被执行完了。执行完了!当然,上一个setTimeout也就不存在了
rd16 2014-09-24
  • 打赏
  • 举报
回复
引用 1 楼 u011751266 的回复:
setTimeout运行结束后就没了 setInterval的话需要考虑这个问题
哥们,你看上面的代码,它在自己调用自己,所以运行一直是没有结束的。 上个setTimeout没有结束就开始新的setTimeout了,不知道浏览器会不会自动注销上一个setTimeout啊????

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧