第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

參數(shù)e(事件)到底是什么?為什么將其傳遞給JavaScript函數(shù)?

參數(shù)e(事件)到底是什么?為什么將其傳遞給JavaScript函數(shù)?

縹緲止盈 2019-11-13 14:21:42
好了,當(dāng)我學(xué)習(xí)JavaScript時(shí),我閱讀的所有書籍和Internet文章都顯示了將參數(shù)傳遞給e處理JavaScript事件的函數(shù)的代碼,例如下面的代碼塊:function myEvent(e) {    var evtType = e.type    alert(evtType)    // displays click, or whatever the event type was}我一直都接受這種方式,但是現(xiàn)在我有一些問(wèn)題(這讓我很困惑):這e是從哪里來(lái)的?當(dāng)我查看整個(gè)JavaScript文件時(shí),e似乎根本不存在。為什么要將此參數(shù)傳遞e給函數(shù)?如果我不傳遞e給函數(shù),函數(shù)會(huì)停止工作嗎?考慮下面的代碼塊。有一個(gè)事件變量(e)傳遞給匿名內(nèi)部函數(shù)。假設(shè)我想在匿名函數(shù)之外使用事件對(duì)象(可能在該行的上方/下方element.onkeypress)。我怎樣才能做到這一點(diǎn)?element.onkeypress = function(e) {    if(e.keyCode) {        element.keyCode = e.keyCode;    } else {        element.keyCode = e.charCode;    }};
查看完整描述

3 回答

?
幕布斯7119047

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


查看完整回答
反對(duì) 回復(fù) 2019-11-13
  • 3 回答
  • 0 關(guān)注
  • 666 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)