如何调用在另一个函数中作为参数传递的函数

how to call a function which is passed as parameter in another function

本文关键字:函数 参数传递 另一个 何调用 调用      更新时间:2023-09-26

如何调用在另一个函数中作为参数传递的函数

这里我调用的函数onclick i将函数名称作为参数

onclick="calldialogbox('thisisfortest')"


这是调用onclick的函数

function calldialogbox(funtion_name){
    var dialog = $('<p>Are you sure?</p>').dialog({
        buttons: {
            "Yes": function(){
                dialog.dialog('close');
                funtion_name(); //here i am calling function
            },
            "Cancel":  function() {
                dialog.dialog('close');
            }
        }
    });
}


这是我想调用的函数

function thisisfortest(){
    alert("thisisfortest");
}

只需传递不带引号的函数。这称为回调。在javascript中,函数是第一类对象,因此您可以像传递普通变量一样传递它们。

PS。尝试使用addEventListener而不是html onclick属性。

如果将函数名作为参数传入,请使用以下解决方法(处理"全局"函数):

...
"Yes": function(){
    dialog.dialog('close');
    window[funtion_name](); //here I'm calling function <----
},
...

与其将function_name视为简单的function整数,不如将函数的名称作为字符串传递,而是对函数本身的实际引用。

onclick="calldialogbox(thisisfortest)"

可以这样做是因为JavaScript中的函数是"第一类对象",可以分配给变量,作为参数传递给其他函数(也称为回调),也可以从函数返回。

就JS最佳实践而言,最好的方法是使用事件侦听器分离内联JS。类似这样的东西:

HTML

<div id="clickable">Click me</div>

JS-

var div = document.getElementById('clickable');
div.addEventListener('click', calldialogbox(thisisfortest), false);

这样就不需要HTML中的onclick事件。

演示

(实际上,因为calldialogbox不是一个异步函数,所以在本例中根本不需要传入回调。)

试试这个
在html中

<a onclick="calldialogbox(thisisfortest)">Click Me</a>

js

function calldialogbox(funtion_name){
var dialog = $('<p>Are you sure?</p>').dialog({
    buttons: {
        "Yes": function(){
            dialog.dialog('close');
            funtion_name(); //here i am calling function
        },
        "Cancel":  function() {
            dialog.dialog('close');
        }
    }
});
}
function thisisfortest(){
alert("thisisfortest");
}