3 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
e您要詢問(wèn)的參數(shù)是一個(gè)Event對(duì)象,它表示觸發(fā)了導(dǎo)致您的函數(shù)執(zhí)行的事件。e并非必須如此,您可以將其命名為任何其他函數(shù)參數(shù)一樣的名稱。
這是從哪里來(lái)的?當(dāng)我查看整個(gè)javascript文件時(shí),e似乎根本不存在。
您將無(wú)法e在javascript文件中找到此變量,因?yàn)樗鼘?shí)際上根本不存在,而是來(lái)自執(zhí)行回調(diào)函數(shù)的javascript引擎。
當(dāng)您為某個(gè)事件(例如element.onkeypress = function(e) { ... })提供回調(diào)函數(shù)時(shí),您就為javascript引擎提供了在該事件觸發(fā)時(shí)執(zhí)行/調(diào)用的函數(shù),并且當(dāng)它執(zhí)行/調(diào)用您的回調(diào)函數(shù)時(shí),它會(huì)傳遞一個(gè)Event代表剛剛發(fā)生的事件的對(duì)象。JavaScript可能正在做這樣的事情來(lái)調(diào)用您的回調(diào)函數(shù):
var e = new Event();
callbackFunction(e);
這就是Event對(duì)象的e來(lái)源。
為什么將此參數(shù)e傳遞給函數(shù)?如果我沒(méi)有將e傳遞給該函數(shù),該函數(shù)會(huì)停止工作嗎?
如果沒(méi)有e參數(shù),該函數(shù)將不會(huì)停止工作。但是,如果您需要訪問(wèn)有關(guān)導(dǎo)致函數(shù)執(zhí)行的事件的一些詳細(xì)信息,則需要使用e參數(shù)來(lái)獲取它們。
考慮下面的代碼塊,有一個(gè)事件變量被傳遞給匿名內(nèi)部函數(shù)??梢哉f(shuō)我想在匿名函數(shù)之外使用事件對(duì)象(可能在element.onkeypress行的上方/下方的行中),該怎么辦?
我不認(rèn)為您可以執(zhí)行此操作,即使您將其存儲(chǔ)在回調(diào)函數(shù)范圍之外的變量中也是如此。這是因?yàn)楹瘮?shù)在聲明時(shí)不會(huì)立即執(zhí)行,而是僅在事件被觸發(fā)時(shí)執(zhí)行(例如,按下某個(gè)鍵,從而觸發(fā)“ keypress”事件)。
var event;
element.onkeypress = function(e) {
event = e;
...
};
console.log(event); // => undefined
唯一可行的方法是,event稍后使用該變量的代碼也將在以后執(zhí)行,特別是onkeypress在執(zhí)行給定的匿名函數(shù)之后 。所以下面的代碼可以工作:
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
添加回答
舉報(bào)