Javascript 传递的函数有一个变量不起作用

Javascript 传递的函数有一个变量不起作用,javascript,Javascript,我有下面的javascript,但是我现在得到了错误:uncaughttypeerror:responseHandler不是一个函数 var Message = { initialMessageList: function(profile_id) { $('.messages-list profile'+ profile_id).html = '<div class="message-loader profile"+ profile_id><i

我有下面的javascript,但是我现在得到了错误:
uncaughttypeerror:responseHandler不是一个函数

var Message = {
    initialMessageList: function(profile_id) {
            $('.messages-list profile'+ profile_id).html = '<div class="message-loader profile"+ profile_id><i class="fa fa-spinner fa-spin"></i></div>';
            Message.fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));
        }

        initialMessageListHandler: function(data, profile_id) {
            $('.messages-list .message-loader profile'+ profile_id).remove();
            $('.messages-list profile'+ profile_id).html(Message.getMessageListHtml(data));
            Message.bindMessageList();
            $('.open-message profile'+ profile_id).first().click();
        },

        fetchMessageList: function(query, responseHandler) {
            $.ajax({
                url: '/app/messages/fetch/' + query,
                dataType: 'json',
                method: 'get'
            })
                .done(function(response) {
                    responseHandler(response); <--- this is the line it errors on
                })
                .fail(function(jqXHR) {
                    if (jqXHR.status == 403) {
                        window.location = '/';
                    } else {
                        responseHandler([]);
                    }
                });
        },
var消息={
initialMessageList:函数(配置文件\u id){
$('.messages list profile'+profile_id).html='';
Message.fetchMessageList(profile_id,Message.initialMessageListHandler(“”,profile_id));
}
initialMessageListHandler:函数(数据、配置文件\u id){
$('.messages list.message loader profile'+profile_id).remove();
$('.messages list profile'+profile_id).html(Message.getMessageListHtml(数据));
Message.bindMessageList();
$('.打开邮件配置文件'+profile_id).first().单击();
},
fetchMessageList:函数(查询、响应句柄){
$.ajax({
url:'/app/messages/fetch/'+query,
数据类型:“json”,
方法:“获取”
})
.完成(功能(响应){

responseHandler(response);之所以会出现错误,是因为您没有传入函数,而是传入被调用函数的结果,这就是添加括号时发生的情况

fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));

fetchMessageList: function(query, responseHandler) {
    responseHandler(); // error, "undefined"
}
注意您如何调用
initialMessageListHandler
,它没有返回值,因此它返回undefined,所以您真正要做的是

fetchMessageList(profile_id, undefined);

fetchMessageList: function(query, responseHandler) {
    responseHandler(); // error, "undefined"
}
你应该做的是

fetchMessageList(profile_id, function() {
    Message.initialMessageListHandler('', profile_id)
});
使用匿名函数作为包装器,当您必须像那样传递参数时,还有另一种方法:您可以像

Message.fetchMessageList(profile_id, Message.initialMessageListHandler.bind(null,'', profile_id));

作为处理程序传递到该函数中的任何内容都不是函数。请使用调试器断点查看
responseHandler
是什么。在哪里定义
responseHandler
Message.fetchMessageList(profile_id, Message.initialMessageListHandler.bind(null,'', profile_id));