0

関数とミリ秒数を引数として取り、setTimeout関数に設定するジェネリック関数を作成しようとしています。私はのように試しました

$("#Delay").click(function() {
    delayCallBack(someFunction(a, b), 100);
});

delayCallBack関数で

function delayCallBack(event, time) {
    setTimeout(function() {
        event();
    }, time);
};

しかし、これは機能せず、javascriptエラーをスローします。誰かがこれを行う儀式の方法で私を助けてくれますか?

4

4 に答える 4

3

交換

$("#Delay").click(function() {delayCallBack(someFunction(a,b), 100);});

$("#Delay").click(function() {delayCallBack(function(){someFunction(a,b)}, 100);});

someFunction(a,b)2行目ではなく、1行目が実行され、実行する関数への参照が渡されます。

于 2012-08-09T09:21:47.197 に答える
2

()関数を呼び出すので、関数を渡すのではなく呼び出します。正規変数のような関数を渡します。

$("#Delay").click(function() {
    delayCallBack(someFunction, 100);
});

関数を少しクリーンアップすることができます...それでも、setTimeout直接呼び出すのとそれほど違いはありません。

function delayCallBack(callback, time) {
    setTimeout(callback, time);
}

引数aとを渡すにbは、既存の関数から部分的に適用される新しい関数を作成しabそれを渡します。

$("#Delay").click(function() {
    delayCallBack(someFunction.bind(null, a, b), 100);
});

の詳細.bind。デモ: http: //jsfiddle.net/Pd5JZ/2/

于 2012-08-09T09:21:36.967 に答える
0

この質問には、JavaScriptで驚くほどトリッキーな答えがあります。これは、値aとを渡すためですb。GerardSextonのソリューションを検討してください

$("#Delay").click(function() {
    delayCallBack(function() {
                      someFunction(a,b);
                  }, 100);
});

そのコードが何をするかは、どこab定義されているか、そしてハンドラーがバインドされた後にそれらに何が起こるかによって異なります。それを文脈に置いたとしましょう:

$(function () {
    var a, b;
    a = b = 5;
    $("#Delay").click(function() {
        delayCallBack(function() {
                          someFunction(a,b);
                      }, 100);
    });
    a = b = 7;
}

次に、ではなく、someFunctionで呼び出されます。最初の値が必要な場合は、ハンドラーをバインドするときに値をコピーする必要があります。そのようです:a=b=7a=b=5

$(function () {
    var a, b;

    function bind(a, b) {
        $("#Delay").click(function() {
            delayCallBack(function() {
                              someFunction(a,b);
                          }, 100);
        });
    }

    a = b = 5;
    bind(a, b);
    a = b = 7;
}
于 2012-08-09T09:35:08.420 に答える
0

また、同じエラーが発生していました:setTimeout呼び出し(引数の前後に引用符がありませんか?)。ジェラルド・セクストンの説明は正しい。

正しいコードは次のようになります

$("#Delay").click(function() {delayCallBack(function(){someFunction(a,b)}, 100);});
于 2013-06-18T03:02:05.880 に答える