采取以下代码:
HTML
<button id="button>click me</button>
JS - 版本 1
window.onload = init;
function init() {
console.log('init called');
var button = document.getElementById('button');
button.onclick = buttonClickHandler;
}
function buttonClickHandler() {
console.log('button clicked');
}
与相同的 HTML
JS - 版本 2
window.onload = init();
在这两种情况下,“init called”都会“立即”出现在控制台中,但在第二种情况下,它后面会出现一个错误,说明 button 为 null。
这里有两件事在起作用。1)在版本 1 中,它等待 DOM 加载 2)在版本 2 中,它发生在 DOM 加载之前,或者看起来如此。
我的问题。请尽可能清楚地解释版本 1 中发生了什么与版本 2 中发生了什么。什么是什么window.onload = init
与什么window.onload = init()
是什么的技术术语是什么?另请解释每个版本的行为。为什么 1 等待,而 2 没有?
脚本需要放在按钮元素之前,例如头部:http: //jsfiddle.net/XMEjr/1/