成为或不成为:window.onload

use*_*031 0 javascript

愚蠢的问题,但是当我写作时,window.onload = alert('hi')我得到警报.

但是,如果我测试它的存在:if (window.onload) alert("exists")我得到undefined.怎么会?

Que*_*tin 7

您正在调用alert方法(立即执行)并将其返回值(undefined)分配给onload.

如果要为此分配函数,onload则需要分配实际函数,而不是任何旧函数调用的返回值.

例如:

onload = function () { 
    alert('hi');
};
Run Code Online (Sandbox Code Playgroud)

要么

function createHiAlertFunction() {
    return function () {
        alert('hi');
    }
}
onload = createHiAlertFunction();
Run Code Online (Sandbox Code Playgroud)

但是,一般来说,您应该避免将事物分配给事件处理程序属性并使用事件绑定方法.这样,如果您想要调用多个函数,则无需处理任何事情.

window.addEventListener('load', function () {
    alert('hi');
});???
Run Code Online (Sandbox Code Playgroud)

请注意,旧版IE不支持这一点,因此您可能希望使用众多库中的一个(例如YUI或jQuery),这些库提供的抽象层包括对旧的专有Microsoft方式的支持.