2
爲什麼下面的代碼(JS Bin)以1,5,3,4的順序點亮?爲什麼2不開火?你如何確定load和DOMContentLoaded事件的觸發順序?
根據the answer to this question,「4」應該在「5」之前發射。這不是警報順序所顯示的。但是,如果我更改body和img onload處理程序以執行document.write
而不是alert
,則會顯示5,這與該答案一致。
<!DOCTYPE html>
<html>
<head>
<script>
document.addEventListener("DOMContentLoaded", function() {
alert("1");
});
document.addEventListener("load", function() {
alert("2");
});
window.addEventListener("load", function() {
alert("3");
});
</script>
</head>
<body onload="alert('4')">
<h1>Hello World!</h1>
<img onload="alert('5')" src="https://developer.cdn.mozilla.net/media/redesign/img/logo_sprite.svg?2014-01" alt="Smiley face" width="42" height="42" />
</body>
</html>
嗨,Eric,謝謝你的徹底例子。我理解這裏的邏輯,但仍令我困惑的是,如果我將console.log或alert更改爲document.write,則執行順序似乎會改變。這是因爲如果我將一個document.write粘貼到img onload處理程序中,那麼它會重寫該文檔並銷燬所有其他處理程序? – 2014-10-10 17:53:42
alert是一個「阻塞」事件,它將阻止執行線程,這將改變事情的行爲。這就是爲什麼人們建議不要使用警報進行調試。 – epascarello 2014-10-10 19:25:25