2012-04-21 129 views
2

我有以下的JavaScript代码:为什么此JavaScript代码在控制台上打印“undefined”?

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控制台中执行代码时,我发现只有。如果它是页面的一部分,它可以正常工作。

回答

6

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

更改 “printCounter()”,加入return "Hello Anton!";到底:-)

编辑 —这是一个有点混乱,说它 “返回undefined”;真的,它没有明确的回报,但效果是一样的。

+1

...所以'undefined'是* REPL评估*的结果,但是由于* asynchronous *计时器正在运行,它将继续调用'console.log' ... – 2012-04-21 21:36:21

+0

是的,谢谢,你是对的。我很困惑,因为所有浏览器都不是这样。 – 2012-04-21 21:40:30