2016-10-12 13 views
-5

私はW3学校でthissetTimeout()メソッド例を見つけましたが、私は説明できない何かに気付きました。例:なぜsetTimeoutが即座にトリガーするのですか?

myVar = setTimeout(alertFunc, 3000); 

...うまくいきます。しかし、私がそれを変更すると、

myVar = setTimeout(alertFunc(), 3000); 

...アラートが瞬時にトリガーされます。どうして?それは同じではありませんか?あなたはalertFuncsetTimeoutの外に呼び出されたことがわかります。このことから
aF = alertFunc(); myVar = setTimeout(aF, 3000);

+4

なぜかっこを追加すると何も変わらないのですか?彼らは装飾のいくつかの種類ではない、彼らは "関数を呼び出す"を意味する –

+2

*これのための良い欺瞞のターゲットに*があります。 –

+0

@ T.J.Crowder 1つのバディを見つけることができません。 –

答えて

6

同じではありませんか?

いいえ、まったくありません。

setTimeout(alertFunc, 3000)は、alertFunc(関数への参照)の値をsetTimeoutに渡します。 setTimeoutはその関数参照を3秒後に呼び出すために格納します。

setTimeout(alertFunc(), 3000)はすぐに、alertFuncを呼び出し、setTimeoutにその戻り値を渡します。正確にはfoo(bar())barとなり、戻り値はfooに渡されます。

+0

"コミュニティウィキ"とは何を意味していますか? – evolutionxbox

+2

@evolutionxbox http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts –

1

myVar = setTimeout(alertFunc(), 3000);は同じです。

2

setTimeout()は、第1のパラメータとして機能を受け入れ、第2のパラメータとして時間を受け入れる。関数を返す関数についても聞いたことがありますように。したがって、その場合は関数を呼び出すこともできます。

()を任意の関数に追加するとすぐに、それを呼び出します。したがって、関数を呼び出して実行するために何も返さないでください。setTimeout。 1

setTimeout(myFunc, 3000); 

ケースはここでは、3秒後に実行得るために関数自体を渡しています。

ケースここでは2

setTimeout(myFunc(), 3000); 

あなたは3秒後に実行を取得する関数の実行戻り値を渡しています。

関連する問題