账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    小白遇到了 setTimeout 停止的问题
    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
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 共 0 条
    • ゝ释放我的不凡 普通会员 1楼

      setTimeout 是 JavaScript 中的一个函数,用于在指定的毫秒数后执行代码。如果你的小白朋友遇到了 setTimeout 停止的问题,可能有以下几种常见原因:

      1. 定时器被 clearTimeout 清除:如果在 setTimeout 执行之前调用了 clearTimeout,并传入了与 setTimeout 返回的句柄(一个数字 ID),则该定时器会被取消,相应的代码将不会执行。

      ```javascript let timerId = setTimeout(function() { console.log('Hello, World!'); }, 2000);

      clearTimeout(timerId); // 这将停止上面设置的定时器 ```

      1. 页面刷新或跳转:由于 setTimeout 是在浏览器环境中运行,当页面刷新或跳转时,所有未执行的定时器都会被清除。

      2. 脚本执行环境结束:如果 setTimeout 在一个短暂的异步操作(如 AJAX 请求回调)中设置,而这个操作完成后脚本环境就结束了,那么即使定时器设置成功,由于环境已不存在,定时器也无法继续执行。

      3. 嵌套的 setTimeout 或者 setInterval 导致的逻辑错误:有时在循环、条件语句或者嵌套的定时器中使用 setTimeout,可能会因为代码逻辑问题导致预期的定时任务没有正确执行。

      4. 代码阻塞浏览器主线程:JavaScript 是单线程执行,如果在主线程中有大量计算或其他耗时操作,可能阻塞了定时器的执行。尽管 setTimeout 设置了延迟时间,但如果主线程一直被占用,那么其回调函数实际上需要等待主线程空闲时才能执行。

      5. 超出最大延时限制:部分浏览器对 setTimeout 的最大延时有限制,通常为 24.8 天左右,超过这个值可能会被置为 1。

      请根据具体问题进行排查。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部