Javascript 以函数为参数的函数
我试图定义一个函数,它应该调用另一个作为主函数参数传递的函数Javascript 以函数为参数的函数,javascript,jquery,function,Javascript,Jquery,Function,我试图定义一个函数,它应该调用另一个作为主函数参数传递的函数 function showMessage(title, text, button, callback) { console.log(title, text, button); if (typeof (callback) != "function") { function callback() {}; alert("converted callback"); } $(
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() );
演示:
问题是,当调用showMessage函数时,myfunction被静态调用
如何解决此问题?正如您所观察到的,带括号的myfunction调用myfunction
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() );
尝试将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'); });
正如您所观察到的,带括号的myfunction调用myfunction
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() );
尝试将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'); });
您需要传递一个函数引用作为回调参数,在本例中,您正在调用该函数并分配MyFunction返回的值。在本例中,未定义为回调参数 还可以看到它的用法
您需要传递一个函数引用作为回调参数,在本例中,您正在调用该函数并分配MyFunction返回的值。在本例中,未定义为回调参数 还可以看到它的用法
如果我需要将参数传递给myfunction怎么办?好的,那么我需要将函数的参数作为showMessage函数的分离参数传递,对吗?如果我需要将参数传递给myfunction怎么办?好的,那么我需要将函数的参数作为showMessage函数的分离参数传递,对吗?谢谢,但是如果我需要将参数传递给回拨?我需要先将它们传递给showMessage,然后再传递给回调吗?@FezVrasta,视情况而定。调用showMessage时回调的参数是已知的还是只有在用户单击元素时才知道?谢谢,我使用了@Arun P Johny的答案中的$.noop和您的答案中的其余部分。谢谢,但是如果我需要将参数传递给回调呢?我需要先将它们传递给showMessage,然后再传递给回调吗?@FezVrasta,视情况而定。调用showMessage时回调的参数是已知的还是仅在用户单击元素时才知道?谢谢,我使用了@Arun P Johny的答案中的$.noop以及您的答案中的其余部分。它会立即调用,因为您正在调用它:myfunction会立即调用它,因为您正在调用它:我的功能