簡體   English   中英

javascript-將回調作為參數傳遞給函數

[英]javascript - passing callback as a parameter to function

我試圖編寫一個通用函數,該函數將函數和毫秒數作為參數並將其設置為setTimeout函數。 我試過像

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

在delayCallBack函數中

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

但這不起作用,並拋出我JavaScript錯誤。 有人可以幫我做禮拜的方式嗎?

更換

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

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

第一行執行someFunction(a,b)而不是第二行執行,將引用傳遞給要執行的函數。

()調用一個函數,因此您要調用該函數而不是傳遞它。 像普通變量一樣傳遞函數:

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

您的函數可以稍作清理……然后,它與直接調用setTimeout沒什么不同。

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

要傳遞參數ab ,可以從現有函數中創建一個部分應用ab的新函數,然后傳遞它:

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

.bind更多內容。 演示: http//jsfiddle.net/Pd5JZ/2/

由於您傳入了值ab ,因此這個問題在JavaScript中的回答令人驚訝。 考慮Gerard Sexton的解決方案

$("#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;
}

然后將使用a=b=7而不是a=b=5調用someFunction 如果需要第一個值,則在綁定處理程序時必須復制這些值。 像這樣:

$(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;
}

我也遇到了同樣的錯誤:setTimeout調用(缺少引號的引號是?)。 Gerard Sexton的解釋是正確的。

正確的代碼應該是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM