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

好了,当我学习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;

    }

};


缥缈止盈
浏览 636回答 3
3回答

幕布斯7119047

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) {&nbsp; &nbsp; event = e;&nbsp; &nbsp; ...};console.log(event); // => undefined唯一可行的方法是,event稍后使用该变量的代码也将在以后执行,特别是onkeypress在执行给定的匿名函数之后 。所以下面的代码可以工作:var event;element.onkeypress = function(e) {&nbsp; &nbsp; event = e;&nbsp; &nbsp; ...};setTimeout(function() {&nbsp; &nbsp; console.log(event); // => the event object, if the `keypress` event&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; fired before `setTimeout` calls this function}, 100000); // <= set to very large value so that it gets run way way later
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript