2013-03-05 114 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