2017-06-21 60 views
0

我目前是網絡開發課程的教師助理。今天,一位學生在他的作業中尋求幫助,他在其中使用了setInterval,將第一個參數作爲第一個參數傳遞給他,直到後面幾行代碼才定義它。我告訴他,這是行不通的,因爲在達到間隔設置代碼的時候,這個功能是不確定的。定義函數之前的JavaScript setInterval回調函數?

令我驚訝的是,它的工作完美。我一直在試圖研究這個問題,並且空白:JavaScript實際上是否等到第一次執行回調,以便看看傳遞給它的函數名是否存在?這看起來很違反直覺,但我無法想象任何其他原因。我在哪裏可以找到有關這種意外行爲的更多信息?

+1

功能定義懸掛... –

回答

1

這取決於: 如果其一個函數表達式

//callback not defined (exists but undefined) 
var callback=function(){}; 
//callback defined 

如果其一個函數聲明

//callback is defined 
function callback(){} 
//callback is defined 

這被稱爲吊裝,所以VARS和功能搬到最高層。


這也取決於所傳遞的功能太:

setInterval(callback,0);//doesnt work, callback is *undefined* in this moment 

setInterval(function(){ callback();},100);//does work as callback is just called before being referenced. 
var callback=function(){};