功能作为参数

时间:2013-11-07 16:10:33

标签: javascript jquery function

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

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()

我该如何解决问题?

2 个答案:

答案 0 :(得分:5)

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

尝试将myfunction传递给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'); });

答案 1 :(得分:2)

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

另请参阅使用$.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);