Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以函数为参数的函数_Javascript_Jquery_Function - Fatal编程技术网

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会立即调用它,因为您正在调用它:我的功能