定时器 setInterval 有一个有名函数 fn1,setInterval(fn1, 500)与 setInterval(fn1(), 500)有什么区别?
参考答案:第一个是重复执行每 500 毫秒执行一次,后面一个只执行一次。
补充
补充:两者根本区别在于传给 setInterval 的第一个参数含义不同。fn1 是函数引用,被浏览器/Node 周期性调用;而 fn1() 是函数执行后的返回值,通常不是函数(除非 fn1 返回另一个函数),所以 setInterval 会以「非法回调」处理。
- setInterval(fn1, 500):每 500ms 重复执行 fn1,循环往复,直到 clearInterval;
- setInterval(fn1(), 500):立即执行一次 fn1,把它的返回值传给 setInterval。如果返回值不是函数,浏览器一般会忽略调度;Node 行为略有差异(旧版本会抛 invalid callback)。
因此答案可以记作:前者周期执行,后者只执行一次(甚至直接报错)。



