3 回答

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
添加回答
举报