JavaScript中setTimeout未等待1秒执行?求代码问题排查
问题原因与解决方案
你的代码核心问题是对setTimeout的回调参数使用错误:
setTimeout(simpleFunction(b), 1000);
这里你直接执行了simpleFunction(b),并把它的返回值(undefined)传给了setTimeout,导致函数没有被延迟,而是立刻触发递归调用,所以程序启动后会瞬间输出大量结果,完全不会等待1秒。
修复方案
方案1:用箭头函数包裹回调
通过箭头函数创建一个匿名函数,作为setTimeout的回调,这样只会在延迟时间到后才执行simpleFunction(b):
function simpleFunction(FFF) { const b = FFF + 1; console.log(b); setTimeout(() => simpleFunction(b), 1000); }; // 传入初始值,比如0 simpleFunction(0);
方案2:使用bind绑定参数
利用Function.prototype.bind创建一个绑定了参数的新函数,避免立即执行:
function simpleFunction(FFF) { const b = FFF + 1; console.log(b); setTimeout(simpleFunction.bind(null, b), 1000); }; simpleFunction(0);
内容的提问来源于stack exchange,提问作者Миркин Алексей
相关产品推荐
相关产品推荐

