
1 Exceptionluo 2017-08-15 13:55:00 +08:00 1、e 就是 event 对象呀 2、类似 arguments 3、不是很懂 |
2 wwqgtxx 2017-08-15 14:00:49 +08:00 via iPhone 浏览器传进去的 |
3 wwqgtxx 2017-08-15 14:02:59 +08:00 via iPhone 而且这里的 button.Onclick= handleClick 并没有调用函数,只是类似于在 c 语言中赋值了一个函数指针而已 |
4 Newyorkcity OP @Exceptionluo 请问 event 对象是指什么,比如在这里就是值 button 这个对象吗?推广开来讲,一个函数因为事件处理被调用时,如果这个函数有一个形参,那么这个形参会被浏览器自动赋值成 造成这个事件的元素的对象吗? 那如果把形参 e 写成 event,element 会有什么区别吗? === 其实我根本疑惑在于 function handleClick(e) 这里有一个形参 而 书上给出的代码 就只有 button. Onclick= handleClick 也就是说这个函数根本不可能得到实参,那它为什么可以工作? 按照我上面的说法去解释吗? 那如果这个函数实际上需要两个参数呢?还是说需要两个参数的函数不允许作为事件处理的函数? == 谢谢 |
5 jarlyyn 2017-08-15 14:22:57 +08:00 就只有 button. Onclick= handleClick 也就是说这个函数根本不可能得到实参,那它为什么可以工作? button.onclick(event) |
6 Exceptionluo 2017-08-15 15:07:30 +08:00 |
7 KeepPro 2017-08-15 15:24:59 +08:00 via Android 我以前也考虑过这个问题 233。 其实你举的例子其实是声明了一个函数并且绑定到点击事件处理器上,并没有调用呢。 调用是在你真正点击按钮的时候才发生的。 |
8 CDog34 2017-08-16 00:04:03 +08:00 button. Onclick= handleClick 这行代码做的事情是:把对 handleClick 这个函数的引用赋给了 button 对象的 onclick 属性,注意这个时候并没有发生调用。 真正的调用发生在点击事件发生的时候,浏览器内部执行了类似 button.onclick(Event)的代码,此时 onclick 是对于 handleClick 的引用,就相当于是调用了 handleClick(Event)。当然实际情况中,函数的上下文可能还不是完全相同,这里只是举个例子~ 而 Event 是浏览器内置的事件对象,click 事件的 Event 属于 MouseEvent,具体可以参考 MDN: https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent 至于触发 click 的 button 对象,可以通过 Event.target 来获得~ |
9 Newyorkcity OP |