2017-06-21 5 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(){}; 
関連する問題