JavaScript每秒加1定时器执行多输出undefined问题排查
问题原因说明
1. undefined输出的直接原因
你定义的setTimer函数没有显式声明返回值,按照JavaScript语法规则,无显式返回值的函数执行后默认返回undefined。你调用函数时使用了console.log(setTimer(5)),会直接打印该函数的返回值,因此第一行输出为undefined。
2. 1~5输出时机靠后的原因
setInterval属于异步API,调用时不会立刻执行内部的回调函数,而是会将回调放入异步任务队列等待调度。JavaScript主线程会优先执行所有同步代码:即先完成setTimer函数执行、定时器注册、打印undefined这一系列同步逻辑,等同步任务全部执行完毕后,才会处理异步队列中的定时器回调,因此1~5的打印会在undefined之后按间隔输出。
修复方案
如果不需要输出多余的undefined,直接去掉外层的console.log,改为直接调用函数即可:
// 替换原来的 console.log(setTimer(5)) setTimer(5)
内容的提问来源于stack exchange,提问作者Jonas Lu
相关产品推荐
相关产品推荐

