我正在尝试定义一个函数,该函数应该调用作为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()
。
我该如何解决问题?
答案 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);