DOM中事件处理程序的第一个参数?

当触发DOM上的事件时,事件对象会自动传递给事件处理程序,无论使用DOM0级还是DOM2级方法绑定。即使事件处理程序未明确声明参数,浏览器也会将事件对象作为arguments[0]传入。通过实验,发现即使指定参数,这个参数也只是事件对象的别名,不影响事件对象的访问。因此,事件处理程序始终有一个隐含的事件对象参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,在触发DOM上的某个事件时,会产生一个事件对象,其中包含与事件相关的所有信息。JS高程中有这样一句话,兼容DOM的浏览器会将一个事件对象传入到事件处理程序中,无论指定事件处理程序时使用什么方法,DOM0级或是DOM2级别,都会传入事件对象。


事件处理程序有参数时直觉上还好理解,但是事件处理程序要是一个参数都没有指定,事件对象真的会传入事件处理程序吗?
以一个按钮<input type="button" value="Click Me" id="myBtn">为样本,我们可以看看是否真的如此。

var btn = document.getElementById("myBtn");
function showMessage() {
  console.log("Clicked");
  console.log(arguments.length);
  console.log(arguments[0].type);
}
btn.onclick = showMessage;

上面代码,使用DOM0级的方法为按钮myBtn绑定了一个没有指定任何参数的事件处理程序,点击按钮后,控制台依次输出Clicked1clickarguments对象是一个类数组对象,包含着传入函数中的所有参数,利用它,我们可以获得关于参数的信息。从结果可以看出,浏览器确实将一个事件对象传入到事件处理程序,即便事件处理程序没有指定任何参数。
下面,看看事件处理程序指定参数的情况。

var btn = document.getElementById("myBtn");
function showMessage(event) {
  console.log("Clicked");
  console.log(arguments.length);
  console.log(arguments[0] === event);
  console.log(event.type);
}
btn.onclick = showMessage;

点击按钮后,控制台依次输出Clicked1trueclick。从结果可以得出,传入一个参数时,该参数名成为arguments[0]的别名,参数和arguments[0]指向同一个对象。因为是别名,所以传入的参数名可以是任何合法的标识符,之所以使用标识符event,是因为它更能表意,也是大家默认的习惯。
现在,可以得出结论了,无论指定事件处理程序时使用什么方法,事件处理程序始终有一个参数,也就是事件对象,由浏览器传入,保存在arguments[0]。


参考资料

本文永久链接https://dukeluo.me/2018/06/20/dom-event-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值