解释这个JavaScript onload函数

时间:2014-06-02 09:36:02

标签: javascript javascript-events

以下是在文档加载上注册函数的示例(大部分内容取自 JavaScript:权威指南):

"use strict";

//run function f when document is loaded
function onLoad(f) {
    if (onLoad.loaded) // If already loaded
        window.setTimeout(f, 0); 
    else if (window.addEventListener) 
        window.addEventListener("load", f, false);
}

onLoad.loaded = false;
onLoad(function() { onLoad.loaded = true; });

onLoad(myfunc);

function myfunc() {
    console.log("Hello, world!");
}

我对行onLoad(function() { onLoad.loaded = true; });感到困惑。我可以告诉它它的自我调用,但再次使用函数名称会让我感到困惑。为什么需要它?我发现如果我只做(function() { onLoad.loaded = true; });那么输出也是一样的。

最后,我可以使用以下方法获得相同的输出:

function myfunc() {
    console.log("Hello, world!");
}

window.onload = (function() {window.setTimeout(myfunc, 0);});

我的代码如何更好/更差?

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

我对行onLoad(function() { onLoad.loaded = true; });感到困惑。我可以说这是自我调用,但是再次使用函数名称会让我感到困惑。

这不是自我调用。

使用一个参数(函数表达式)调用函数onLoad(之前定义)。

  

最后,我可以通过使用...获得相同的输出...我的代码如何更好/更差?

您的代码将:

  • 仅支持在加载事件触发时调用的函数函数。如果您尝试分配另一个函数,它将覆盖前一个函数,而不是设置事件触发时要调用的两个函数。
  • 如果加载事件已经被触发,则不会立即(或根本不)调用该函数(因此您无法在可以动态添加到页面并正常使用的脚本中使用它)