1
function f1()
{
  c = setTimeout(f2,200);
}
function f2()
{
 //code
}

上記のコードは問題ありません。しかし、私が聞きたいのは、呼び出し元の環境から渡される関数 f2() でいくつかの引数を使用できますか? あれは:

 function f1(v1)
    {
      c = setTimeout(f2(v1),200);
    }
    function f2(v2)
    {
     //code
    }

有効ですか?私はこのようなことを試みたので、変数 c を使用して clearTimeout を実行できないことが問題です。どうすればよいかわかりません。

4

3 に答える 3

1

クロージャーを使用-

function f1(v1)
{
    c = setTimeout(f2(v1), 200);
}

function f2(v2)
{
     return function () {
         // use v2 here, and put the rest of your
         // callback code here.
     }
}

このようにして、必要な数の引数を渡すことができます。

グローバル変数として宣言しているのでc(これは悪いことです)、-を使用してタイムアウトを簡単にクリアできます-

clearTimeout(c);

それでもタイムアウトをクリアできない場合は、期間が経過してコールバックが発生したか、他の場所でエラーが発生したことを意味するだけです。その場合は、タイムアウトをクリアするために使用しているコードを投稿してください。

于 2013-09-01T10:32:29.860 に答える
0
var timeout;
// Call `f2` with all arguments that was passed to the `f1`
function f1 () {
  var args = arguments;
  timeout = setTimeout(function () { f2.apply(this, args) }, 200);
}

または、次のようにします。

// Call `f2` with some params from `f1`
function f1 (v1) {
  timeout = setTimeout(function () { f2(v1) }, 200);
}

質問への回答: 関数をすぐに実行するため、タイムアウトをクリアできませんでした。

于 2013-09-01T10:31:15.660 に答える
0

function.bind メソッドを使用するか、単に呼び出しをラップすることができます

function f1(v1) { 
    c = setTimeout(function() {
        f2(v1);
    }, 200); 
} 
于 2013-09-01T10:34:56.680 に答える