我一直在挣扎何时接收/传递参数到JavaScript函数的想法,阅读有关 onchange event handlers at MDN的这篇文章有助于我明确我的问题。这是文章中的代码:

<input type="text" placeholder="Type something here, then click outside of the field." size="50">
<p id="log"></p>
let input = document.querySelector('input');
let log = document.getElementById('log');

input.onchange = handleChange; //<<< Question on this <<<<<<

function handleChange(e) {
  log.textContent = `The field's value is
      ${e.target.value.length} character(s) long.`;
}

我看到input具有一个onchange事件处理程序,该事件处理程序将数据提供给o​​jit_code函数。它甚至在文档中指出:



但是,我很难理解handleChange()在没有括号的情况下如何接收Event对象?
handleChange()
Event对象是全局对象,而input.onchange = handleChange; // Where's the parentheses?是如何操作它的?如果是这种情况,您在定义函数时是否可以忽略handleChange()参数?

最佳答案

在所讨论的行中,您正在将一个方法分配为处理程序(实际上,将输入对象的属性设置为方法引用)。您没有在调用该方法。然后,浏览器负责创建Event对象,并在每次检测到适当的handleChange事件发生时将其传递给onChange

告诉您的 friend 披萨店的电话号码和您的 friend 在五个不同的时间订购不同的披萨之间是有区别的。

10-02 00:58