如何使用参数调用回调函数

时间:2013-12-26 08:31:26

标签: javascript callback

我有这个main函数,它接受1个字符串和2个回调函数作为参数。以下是代码。

function confirmYesNo(confirmMessage, confirmCallback, cancelCallback) {
    $("#yes-button").click(function () {
         confirmCallback(); //How do I pass confirmCallback arguments
    });
    ...
}

以下是调用函数的方法

function confirmYesNoTest() {
    var confirmContent = "Some Message"
    var id = "1";
    confirmYesNo(confirmContent,
        function (id) { alert(id); }, //alerts undefined
        function () { alert("Cancel Clicked"); });
}

问题是,当confirmCallback执行时,上面的id变量(设置为1)变为“undefined”。似乎与范围相关的东西,但我无法使其工作。

1 个答案:

答案 0 :(得分:2)

回调不应该带任何参数。你可以在一个闭包中捕获id:

function confirmYesNoTest() {
    var confirmContent = "Some Message"
    var id = "1";
    confirmYesNo(
        confirmContent,
        function () { alert(id); },
        function () { alert("Cancel Clicked"); }
    );
}

或者,如果您不想使用闭包,可以将id作为参数传递给回调:

function confirmYesNo(confirmMessage, id, confirmCallback, cancelCallback) {
    $("#yes-button").click(function () {
         confirmCallback(id);
    });
    ...
}

并在调用时:

function confirmYesNoTest() {
    var confirmContent = "Some Message"
    var id = "1";
    confirmYesNo(
        confirmContent,
        id,
        function (id) { alert(id); },
        function () { alert("Cancel Clicked"); }
    );
}

现在您可以将回调用作命名函数:

var confirmCallback = function(id) {
    alert(id);
};

然后:

function confirmYesNoTest() {
    var confirmContent = "Some Message"
    var id = "1";
    confirmYesNo(
        confirmContent,
        id,
        confirmCallback,
        function () { alert("Cancel Clicked"); }
    );
}