Javascript 单击eventListener时出现问题

Javascript 单击eventListener时出现问题,javascript,jquery,Javascript,Jquery,我发现了一个示例任务,当您单击文档中的任意位置时,在页面上显示警报。在任务中,您只需要编辑display()函数,该函数有两个参数-myFunc和myObj,以便显示person对象的名称。我想出了类似的方法,但警报只在页面刷新后出现,而不是在每次单击文档后出现 function start() { var person = {         name : "John"     };     function alertName() {         alert(""+this.na

我发现了一个示例任务,当您单击文档中的任意位置时,在页面上显示警报。在任务中,您只需要编辑display()函数,该函数有两个参数-myFunc和myObj,以便显示person对象的名称。我想出了类似的方法,但警报只在页面刷新后出现,而不是在每次单击文档后出现

function start() {
    var person = {
        name : "John"
    };
    function alertName() {
        alert(""+this.name.toUpperCase() + "");
    }
    document.addEventListener('click', display(alertName, person));
}
function display(myFunc, myObj) {
  name = myObj.name;
  myFunc();

}
start();
这是小提琴:

函数开始(){
个人变量={
        姓名:“约翰”
    };
    函数alertName(){
        警报(“+this.name.toUpperCase()+”);
    }
    document.addEventListener('click',start(alertName,person));
}
功能显示(myFunc、myObj){
name=myObj.name;
myFunc();
}
开始();
正文{
背景颜色:黄色;
}

您需要了解
display
是一个函数,通过
display(alertName,person)
您可以立即调用它,而不是作为事件回调。但是
addEventListener
需要函数引用作为第二个参数,因此这意味着在调用
display(alertName,person)时
必须返回一个新函数,该函数将从内部调用
alertName
(这是一个引用)

最后,
this.name
alertName
中意味着需要在
myObj
的上下文中调用它

函数开始(){
个人变量={        
姓名:“约翰”    
}
函数alertName(){        
警报(“+this.name.toUpperCase()+”);    
}
document.addEventListener('click',display(alertName,person));
}
功能显示(myFunc、myObj){
返回函数(){
myFunc.call(myObj)
}
}
开始();

单击某处。
addEventListener第二个参数中的问题需要是在触发事件时要调用的函数

在您的示例中,您传递的是指令而不是函数。您可以在函数体中添加display()调用,并将该函数作为第二个参数传递:

function start() {
    var person = {
        name : "John"
    };
    function alertName() {
        alert(""+this.name.toUpperCase() + "");
    }
    document.addEventListener('click', function() {
    display(alertName, person)
    });
}
function display(myFunc, myObj) {
  name = myObj.name;
  myFunc();

}
start();

事件侦听器不是这样工作的。您不必在回调中选择参数。此外,由于包含参数,这样做会在声明事件侦听器时执行函数。您需要传递对函数的引用。从技术上讲,您所做的是传递display()的结果函数作为回调参数。这没有任何意义,因为该函数不返回任何内容。而您的fiddle不起作用,因为您调用了一个不存在的函数,并且它与此处的示例不匹配。在发布之前检查您的内容:-)那里没有jquery-您打算单独使用jquery或javascript吗?