从" JavaScript:The Definite Guide"?中使用这个onLoad函数的重点是什么?

时间:2015-06-30 15:17:11

标签: javascript javascript-events onload

下面的代码段来自 JavaScript:The Definite Guide 一书。

我对此有一些疑问。从我的角度来看,我没有预料到必须使用onLoad函数的情况。

我认为这块代码必须用作全局javascript,而不是作为事件处理程序的一部分。如果在按钮的事件处理程序中调用它,则必须已触发窗口上的load事件。因此,永远不会调用注册的函数。

但是,如果将其用作全局javascript,则在调用onLoad.loaded函数时onLoad始终为false。

为什么不在窗口上注册load事件,而不是检查onLoad.loaded是真还是假?



// Register the function f to run when the document finishes loading.
// If the document has already loaded, run it asynchronously ASAP.
function onLoad(f) {
    if (onLoad.loaded) // If document is already loaded
        window.setTimeout(f, 0); // Queue f to be run as soon as possible
    else if (window.addEventListener) // Standard event registration method
        window.addEventListener("load", f, false);
    else if (window.attachEvent) // IE8 and earlier use this instead
        window.attachEvent("onload", f);
}

// Start by setting a flag that indicates that the document is not loaded yet.
onLoad.loaded = false;

// And register a function to set the flag when the document does load.
onLoad(function() {
    onLoad.loaded = true;
});




1 个答案:

答案 0 :(得分:2)

我认为你误解了使用场景。

您说得对,上面的代码段应该在网页完成加载之前在启动时执行,以便准确分配onLoad.loaded

但是,脚本定义的onLoad函数可以从任何地方调用,稍后甚至可以从按钮事件处理程序等调用。