为什么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
相关产品推荐
相关产品推荐

