1

我正在尝试定义一个函数,该函数应该调用作为主函数参数传递的(另一个)函数。

function showMessage(title, text, button, callback) {

    console.log(title, text, button);

    if (typeof (callback) != "function") {
        function callback() {};
        alert("converted callback");
    }

    $("div").click( function() {
        callback();
    });

}

function myfunction() {
    alert("function!");
}

showMessage("title", "text", "button", myfunction() );

演示:http: //jsfiddle.net/XvE8D/1/

问题是当showMessage()函数被调用时,myfunction()被立即调用。

我该如何解决这个问题?

4

2 回答 2

5

正如您所观察到的,myfunction()带括号调用myfunction.

尝试不带括号传递myfunctionto :showMessage

showMessage("title", "text", "button", myfunction);

此外,showMessage您必须更改此部分:

if (typeof (callback) != "function") {
    function callback() {};
    alert("converted callback");
}

对此:

if (typeof (callback) != "function") {
    callback = function() {};
    alert("converted callback");
}

要将其他参数传递给myfunction,您可以包装myfunction另一个函数并将其传递给showMessage. 像这样的东西应该工作:

showMessage("title", "text", "button", function() { myfunction('foo'); });
于 2013-11-07T16:11:02.630 回答
2

myfunction您需要将函数引用作为回调参数传递,在您的情况下,您正在调用该函数并将(在本例中为未定义)返回的值分配为回调参数。

另请参阅使用$.noop()

function showMessage(title, text, button, callback) {   
    console.log(title, text, button);

    callback = callback || $.noop;

    $("div").click(function(){
        callback('my params')
    });
}

function myfunction() {
    alert("function!");
}

showMessage("title", "text", "button", myfunction);
于 2013-11-07T16:12:41.927 回答