2013-03-05 112 views
0

在JavaScript中,为什么此代码有效?无返回值的函数

var myVar=setInterval(
    function(){ 
     myTimer() 
    },1000 
); 

function myTimer() 
{ 
    var d=new Date(); 
    var t=d.toLocaleTimeString(); 
    document.getElementById("demo").innerHTML=t; //displays time 
    dpcument.getElementById("demo2").innerHTML = myVar; //displays 1 
} 

为什么myVar持有,即使1我不是从函数返回什么值?

回答

5

setInterval返回一个值,而不是你的函数。它返回一个intervalID,所以你可以用clearTimeout清除它。

2

myVar将呼叫的返回值保留为setInterval,无论您声明了匿名函数的事实如何。

0

myVar会将呼叫的返回值设为setInterval,而不是您传递的匿名函数的返回值,而不是从myTimer

这里是它如何工作的:

  1. 你叫setInterval,它返回一个计时器ID。您将它传递给匿名函数。
  2. 当间隔到期时,匿名函数被调用(内部)。它返回未定义(但没关系,因为它在内部调用,并且从不使用返回值)。
  3. 每次调用匿名函数时,都会调用myTimer,这也会返回undefined。这不会在你的匿名函数中使用。
+0

对于谁低估:我想知道我的第一句话有什么问题。 – bfavaretto 2013-03-05 21:05:46