今天520,爲表達我對前端的熱愛,特此發了一篇小總結。實際上你看不看這文章,對你目前來說,其實也沒多大影響,這是個人真心話哈哈html
剛學前端的時候,有不少教程或者資料,都會教綁定監聽事件函數時,可能會看到這麼一句代碼前端
function (e) {
var e = e || window.event;
}
複製代碼
當時給你指導的人/資料都會跟你解釋,這是爲了解決瀏覽器兼容性,爲了兼容ie和Firefox。其實這是一種很籠統的說法,由於綁定監聽事件的方式不一樣,可能狀況不同。可是不論怎樣,這麼寫準沒錯。瀏覽器
然而時至今日(2019-05-20),這種處理是否已經還有必要呢,畢竟技術的東西變化很快,一些老舊的知識,是否該摒棄,別讓其再迷惑你的腦殼,讓代碼更加累贅。bash
爲了方便描述e = e || window.event
現象。先在這裏總結綁定監聽爲四類,分別舉例以下:函數
<!-- 方式一 -->
<!-- 腳本直接寫在html裏 -->
<div onclick="console.log()"></div>
複製代碼
<!-- 方式二 -->
<!-- html裏綁定函數 -->
<div onclick="handlerClick()"></div>
複製代碼
// 方式三
// 在js裏直接綁定
document.getElementById('example').onclick = function() {...}
複製代碼
// 方式四
// 用綁定事件函數綁定
var obj = document.getElementById('example');
function handlerClick () {...}
// ie8含8如下用attachEvent,監聽事件要帶'on'
obj.addEventListener ? obj.addEventListener('click', handlerClick, false) : obj.attachEvent('onclick', handlerClick);
複製代碼
我直接上總結了,之前的資料常說的,Firefox瀏覽器只認識監聽綁定的函數的第一個參數event
,而IE8如下只認識window.event;測試
如今通過測試,要糾正一點就是,Firefox瀏覽器如今也支持window.event了。估計是版本比較老的火狐纔不支持吧ui
因此如今惟一特立獨行的就是讓人苦惱的IE8(含8)如下的了。因此時至今日的新的總結就是:spa
window.event
(可省略window
),也能夠不傳參,直接在函數裏用window.event
(可省略window
)。 畢竟全部瀏覽器都認識window.event
之後要用event
的話,全部瀏覽器統一當作window.event
來處理就好了。火狐通常會自動更新爲最新版的,因此前的顧慮基本上沒有了。code