2

私は以下のような2つの機能を持っています、

func1 = function(){
    console.log("func1 is called"); 
}

func2 = function(){
    console.log("func2 is called");
    setTimeout(func1(),10000) 
}

のような電話をかけるとfunc2()。出力は得られますが、期待されるものではありsetTimeout()ませfunc2func1

ただし、遅延は観察されず、両方の行が同時にコンソールに出力されます。ここで何が間違っているのですか、それとも何か不足していますか? 助けてください..

4

3 に答える 3

9

関数を参照するときは、括弧を外す必要があります。

setTimeout(func1,10000);
于 2013-03-29T09:04:00.003 に答える
3

setTimeout への呼び出しでfunc1の後の括弧を削除します。

setTimeout関数は関数参照を想定しています。

コードは、アラートを出力した後、func1 の呼び出し結果setTimeout()に渡します。

関数名の後に括弧が続くと、関数が呼び出されます。

func1 = function () {
    alert('func1 is called');
}

func2 = function(){
    console.log("func2 is called");
    // Invoke func1 and pass the return value (which is undefined) to setTimeout.  
    // An alert will be displayed immediately when func1 is invoked.
    setTimeout(func1(),10000) 
}

func2 = function(){
    console.log("func2 is called");
    // Pass a reference to func1 to setTimeout to be invoked later.
    setTimeout(func1,10000) 
}
于 2013-03-29T09:04:23.477 に答える
2

無名関数を指定することもできます:

setTimeout(function(){func1();},10000);
于 2013-03-29T09:05:22.310 に答える