You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中实现sleep函数?为何我的循环实现致页面崩溃?

为什么你的sleep代码会导致网站崩溃?

先拆解你代码里的几个关键问题:

  • 你写的d.getSeconds是函数本身,不是调用函数获取当前秒数,必须加括号写成d.getSeconds()才行。不然oldTime存的是函数引用,后面计算差值时根本不是数字,永远不可能等于seconds。
  • 就算补上括号,d是一开始创建的固定Date对象,它的秒数不会自动更新,循环里每次取的都是同一个值,差值永远是0,循环永远跳不出去,直接变成死循环。
  • 这种同步的while死循环会霸占JavaScript的主线程,浏览器完全没法处理其他事件(比如点击、页面渲染),所以网站直接卡死崩溃。
简单易懂的sleep实现方式

给你两种容易理解的实现,都不会卡死页面:

方式1:用setTimeout(异步回调)

这是最基础的写法,让指定代码在延迟后执行:

function sleep(callback, seconds) {
  // 把秒转成毫秒,因为setTimeout只认毫秒单位
  setTimeout(callback, seconds * 1000);
}

// 用法:2秒后执行括号里的代码
sleep(function() {
  console.log("2秒到了!");
}, 2);

方式2:用Promise+async/await(像同步代码一样写)

如果不想用回调,这种写法更接近传统sleep的直观逻辑:

function sleep(seconds) {
  return new Promise(resolve => {
    setTimeout(resolve, seconds * 1000);
  });
}

// 必须在async函数里使用await
async function test() {
  console.log("开始等待");
  await sleep(2); // 等待2秒
  console.log("2秒过去了");
}

test();

这两种都是异步逻辑,不会霸占主线程,页面还能正常响应操作。

内容的提问来源于stack exchange,提问作者swag money wizz jizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:07:40