Javascript将事件传递给函数

Javascript将事件传递给函数,javascript,function,events,mouseevent,Javascript,Function,Events,Mouseevent,为什么第一种方法有效,而第二种方法无效 我不明白为什么我可以使用第一种方法将事件传递给函数,而不是第二种方法。对我来说,这些应该是一样的。松散地以…为基础 这确实有效: document.onclick = function (e) { var x = e.pageX; var y = e.pageY; console.log(x); }; 这是行不通的。它返回“未捕获引用错误:未定义z” 因为在第二种方法中,您调用的是函数,而不是将事件操作定义为它。请尝试以下方法: functi

为什么第一种方法有效,而第二种方法无效

我不明白为什么我可以使用第一种方法将事件传递给函数,而不是第二种方法。对我来说,这些应该是一样的。松散地以…为基础

这确实有效:

document.onclick = function (e) {
  var x = e.pageX;
  var y = e.pageY;
  console.log(x);
};
这是行不通的。它返回“未捕获引用错误:未定义z”


因为在第二种方法中,您调用的是函数,而不是将事件操作定义为它。请尝试以下方法:

function mousePosition (e) {
    var x = e.pageX;
    var y = e.pageY;
    console.log(x);
};
document.onclick = function(z){
    mousePosition(z);
}
或者:

function mousePosition (e) {
    var x = e.pageX;
    var y = e.pageY;
    console.log(x);
};
document.onclick = mousePosition;

因为在第二种方法中,您调用的是函数,而不是将事件操作定义为它。请尝试以下方法:

function mousePosition (e) {
    var x = e.pageX;
    var y = e.pageY;
    console.log(x);
};
document.onclick = function(z){
    mousePosition(z);
}
或者:

function mousePosition (e) {
    var x = e.pageX;
    var y = e.pageY;
    console.log(x);
};
document.onclick = mousePosition;

将函数引用传递给onclick事件处理程序的第一个函数。第二次尝试调用mousePosition(z)并将结果分配给onclick处理程序。这不是您想要的。

将函数引用传递给onclick事件处理程序的第一个函数。第二次尝试调用mousePosition(z)并将结果分配给onclick处理程序。这不是您想要的。

如其他答案所述,您的代码:

document.onclick = mousePosition(z);
正在调用
mousePosition()
函数,传递未定义的变量
z
。您应该做的是传递对
鼠标位置的引用

document.onclick = mousePosition;   // note: no parentheses
“我不明白为什么我可以使用第一种方法将事件传递给函数”

事实上,您并没有向函数传递事件。您正在声明一个匿名函数,该函数有一个名为
e
的参数,并设置
document.onclick
以引用该函数

当事件发生时,浏览器调用您的函数,它可能会传递事件对象,具体取决于您使用的浏览器:IE不会将事件对象作为参数传递,它会通过
窗口.event
属性使其可用


浏览器不管您是否明确声明了参数,事实上,即使您没有声明,您仍然可以通过访问传入的任何参数。

正如其他答案所述,您的代码:

document.onclick = mousePosition(z);
正在调用
mousePosition()
函数,传递未定义的变量
z
。您应该做的是传递对
鼠标位置的引用

document.onclick = mousePosition;   // note: no parentheses
“我不明白为什么我可以使用第一种方法将事件传递给函数”

事实上,您并没有向函数传递事件。您正在声明一个匿名函数,该函数有一个名为
e
的参数,并设置
document.onclick
以引用该函数

当事件发生时,浏览器调用您的函数,它可能会传递事件对象,具体取决于您使用的浏览器:IE不会将事件对象作为参数传递,它会通过
窗口.event
属性使其可用


浏览器不管你是否明确声明了参数,事实上,即使你没有声明,你仍然可以访问通过传递的任何参数。

哈哈,是的,这就是我出错的原因:)哈哈,是的,这就是我出错的原因:)谢谢李,那么你的意思是什么“将函数引用传递给onclick事件处理程序”?这是否意味着onclick事件处理程序现在除了执行任何其他操作外还将执行该函数?通过引用,就像说“当事件发生时调用提供的函数”“.这就是你在第一部中所做的。第二种方法是不传递引用,实际上是调用函数并将结果传递给onclick处理程序,这可能不是您想要做的(但可以工作(取决于函数返回的内容)),您可以对它们进行菊花链,但这是另一天的事!谢谢Lee,那么“将函数引用传递给onclick事件处理程序”是什么意思呢?这是否意味着onclick事件处理程序现在除了执行任何其他操作外还将执行该函数?通过引用,这就像说“当事件发生时调用提供的函数”。这就是你在第一节中所做的。第二种方法是不传递引用,实际上是调用函数并将结果传递给onclick处理程序,这可能不是您想要做的(但可以工作(取决于函数返回的内容)),您可以对它们进行菊花链,但这是另一天的事!是否需要在此处添加嵌套闭包/函数?因为
mousePosition
已经是一个单参数函数,所以它不能仅仅是
document.onclick=mousePosition
?是的,但它只是为了说明问题,您需要在那里添加嵌套闭包/函数吗?它不能仅仅是
document.onclick=mousePosition
,因为
mousePosition
已经是一个单参数函数了吗?是的,但这只是为了说明问题