为了账号安全,请及时绑定邮箱和手机立即绑定

参数e(事件)到底是什么?为什么将其传递给JavaScript函数?

参数e(事件)到底是什么?为什么将其传递给JavaScript函数?

缥缈止盈 2019-11-13 14:21:42
好了,当我学习JavaScript时,我阅读的所有书籍和Internet文章都显示了将参数传递给e处理JavaScript事件的函数的代码,例如下面的代码块:function myEvent(e) {    var evtType = e.type    alert(evtType)    // displays click, or whatever the event type was}我一直都接受这种方式,但是现在我有一些问题(这让我很困惑):这e是从哪里来的?当我查看整个JavaScript文件时,e似乎根本不存在。为什么要将此参数传递e给函数?如果我不传递e给函数,函数会停止工作吗?考虑下面的代码块。有一个事件变量(e)传递给匿名内部函数。假设我想在匿名函数之外使用事件对象(可能在该行的上方/下方element.onkeypress)。我怎样才能做到这一点?element.onkeypress = function(e) {    if(e.keyCode) {        element.keyCode = e.keyCode;    } else {        element.keyCode = e.charCode;    }};
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

e您要询问的参数是一个Event对象,它表示触发了导致您的函数执行的事件。e并非必须如此,您可以将其命名为任何其他函数参数一样的名称。


这是从哪里来的?当我查看整个javascript文件时,e似乎根本不存在。

您将无法e在javascript文件中找到此变量,因为它实际上根本不存在,而是来自执行回调函数的javascript引擎。


当您为某个事件(例如element.onkeypress = function(e) { ... })提供回调函数时,您就为javascript引擎提供了在该事件触发时执行/调用的函数,并且当它执行/调用您的回调函数时,它会传递一个Event代表刚刚发生的事件的对象。JavaScript可能正在做这样的事情来调用您的回调函数:


var e = new Event();

callbackFunction(e);

这就是Event对象的e来源。


为什么将此参数e传递给函数?如果我没有将e传递给该函数,该函数会停止工作吗?

如果没有e参数,该函数将不会停止工作。但是,如果您需要访问有关导致函数执行的事件的一些详细信息,则需要使用e参数来获取它们。


考虑下面的代码块,有一个事件变量被传递给匿名内部函数。可以说我想在匿名函数之外使用事件对象(可能在element.onkeypress行的上方/下方的行中),该怎么办?

我不认为您可以执行此操作,即使您将其存储在回调函数范围之外的变量中也是如此。这是因为函数在声明时不会立即执行,而是仅在事件被触发时执行(例如,按下某个键,从而触发“ keypress”事件)。


var event;


element.onkeypress = function(e) {

    event = e;

    ...

};


console.log(event); // => undefined

唯一可行的方法是,event稍后使用该变量的代码也将在以后执行,特别是onkeypress在执行给定的匿名函数之后 。所以下面的代码可以工作:


var event;


element.onkeypress = function(e) {

    event = e;

    ...

};


setTimeout(function() {

    console.log(event); // => the event object, if the `keypress` event

                        //    fired before `setTimeout` calls this function

}, 100000); // <= set to very large value so that it gets run way way later


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 635 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号