我們曉得,在觸發DOM上的某個事宜時,會發生一個事宜對象,个中包括與事宜相干的一切信息。JS高程中有如許一句話,兼容DOM的瀏覽器會將一個事宜對象傳入到事宜處置懲罰順序中,不管指定事宜處置懲罰順序時運用什麼要領,DOM0級或是DOM2級別,都邑傳入事宜對象。
事宜處置懲罰順序有參數時直覺上還好明白,然則事宜處置懲罰順序如果一個參數都沒有指定,事宜對象真的會傳入事宜處置懲罰順序嗎?
以一個按鈕<input type="button" value="Click Me" id="myBtn">
為樣本,我們能夠看看是不是真的云云。
var btn = document.getElementById("myBtn");
function showMessage() {
console.log("Clicked");
console.log(arguments.length);
console.log(arguments[0].type);
}
btn.onclick = showMessage;
上面代碼,運用DOM0級的要領為按鈕myBtn
綁定了一個沒有指定任何參數的事宜處置懲罰順序,點擊按鈕后,控制台順次輸出Clicked
、1
、click
。arguments
對象是一個類數組對象,包括着傳入函數中的一切參數,利用它,我們能夠獲得關於參數的信息。從效果能夠看出,瀏覽器確實將一個事宜對象傳入到事宜處置懲罰順序,即使事宜處置懲罰順序沒有指定任何參數。
下面,看看事宜處置懲罰順序指定參數的狀況。
var btn = document.getElementById("myBtn");
function showMessage(event) {
console.log("Clicked");
console.log(arguments.length);
console.log(arguments[0] === event);
console.log(event.type);
}
btn.onclick = showMessage;
點擊按鈕后,控制台順次輸出Clicked
、1
、true
、click
。從效果能夠得出,傳入一個參數時,該參數名成為arguments[0]
的別號,參數和arguments[0]
指向同一個對象。由於是別號,所以傳入的參數名能夠是任何正當的標識符,之所以運用標識符event
,是由於它更能表意,也是人人默許的習氣。
如今,能夠得出結論了,不管指定事宜處置懲罰順序時運用什麼要領,事宜處置懲罰順序一直有一個參數,也就是事宜對象,由瀏覽器傳入,保存在arguments[0]。