- 66
- 0
let s, n = 0;
function mainLoop() {
s = setTimeout(function () {
doSomeThing();
mainLoop();
}, 1000);
}
function doSomeThing() {
n ++;
console.log(n);
if (n > 5) {
stop();
}
}
function stop() {
console.log("---stop----")
clearTimeout(s);
}
mainLoop();
上面这段代码为什么执行五次以后不会自动停止啊?
- 共 0 条
- 全部回答
-
ゝ释放我的不凡 普通会员 1楼
setTimeout 是 JavaScript 中的一个函数,用于在指定的毫秒数后执行代码。如果你的小白朋友遇到了 setTimeout 停止的问题,可能有以下几种常见原因:
- 定时器被 clearTimeout 清除:如果在 setTimeout 执行之前调用了 clearTimeout,并传入了与 setTimeout 返回的句柄(一个数字 ID),则该定时器会被取消,相应的代码将不会执行。
```javascript let timerId = setTimeout(function() { console.log('Hello, World!'); }, 2000);
clearTimeout(timerId); // 这将停止上面设置的定时器 ```
-
页面刷新或跳转:由于 setTimeout 是在浏览器环境中运行,当页面刷新或跳转时,所有未执行的定时器都会被清除。
-
脚本执行环境结束:如果 setTimeout 在一个短暂的异步操作(如 AJAX 请求回调)中设置,而这个操作完成后脚本环境就结束了,那么即使定时器设置成功,由于环境已不存在,定时器也无法继续执行。
-
嵌套的 setTimeout 或者 setInterval 导致的逻辑错误:有时在循环、条件语句或者嵌套的定时器中使用 setTimeout,可能会因为代码逻辑问题导致预期的定时任务没有正确执行。
-
代码阻塞浏览器主线程:JavaScript 是单线程执行,如果在主线程中有大量计算或其他耗时操作,可能阻塞了定时器的执行。尽管 setTimeout 设置了延迟时间,但如果主线程一直被占用,那么其回调函数实际上需要等待主线程空闲时才能执行。
-
超出最大延时限制:部分浏览器对 setTimeout 的最大延时有限制,通常为 24.8 天左右,超过这个值可能会被置为 1。
请根据具体问题进行排查。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

