为什么这段 JavaScript 代码在控制台上打印“未定义”?

IT技术 javascript undefined read-eval-print-loop
2021-01-18 11:02:42

我有以下 JavaScript 代码:

var counter = 0;
function printCounter(){
   console.log("counter=" + ++counter);
   setTimeout(printCounter, 1000);
}
printCounter();

我希望它应该打印此输出:

counter=1
counter=2
counter=3
...

但它会打印以下内容:

counter=1
undefined  // <-- Notice this "undefined"
counter=2
counter=3
...

为什么在第一次迭代后打印“未定义”?

重要提示:只有在 JavaScript 控制台中执行代码时,才会看到这种行为如果它是页面的一部分,它工作正常。

1个回答

这是因为“printCounter()”函数本身返回undefined. 那是控制台告诉您表达式的结果。

通过添加return "Hello Anton!";到末尾来更改“printCounter()” :-)

说它“返回undefined有点令人困惑真的,它没有明确的回报,但效果是一样的。

...所以这undefinedREPL 评估的结果,但由于异步计时器正在运行,它将继续调用console.log...
2021-03-19 11:02:42
是的,谢谢,你说得对。我很困惑,因为并非所有浏览器都如此。
2021-04-04 11:02:42