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

为什么setTimeout没有等待10000毫秒反而立即触发?

原因分析

你代码里setTimeout的第一个参数直接写了main("test2"),这是直接执行函数的表达式,不是把函数本身作为回调传给定时器。JS 解析到这一行时会先运行main("test2")拿到它的返回值(你的main没有写返回语句,默认返回undefined),再把返回值传给setTimeout,自然不会等待10秒才触发执行。

正确修改方案

可以用以下两种写法实现10秒后调用main并传入test2的效果:

  • 用匿名函数包裹调用逻辑:
setTimeout(() => {
  main("test2")
}, 10000)
  • 利用setTimeout原生传参特性:setTimeout从第三个参数开始的所有值,都会自动作为入参传给回调函数,写法更简洁:
setTimeout(main, 10000, "test2")

额外注意:你的代码里判断main.once是否为undefined来控制setInterval只创建一次,但你从未给main.once赋值,每次调用main都会重复生成新的定时器,可能导致内存泄漏,建议在第一次创建定时器后补充赋值main.once = true。

内容的提问来源于stack exchange,提问作者user310291

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:42:03