解释这个 JavaScript onload 函数

问题描述 投票:0回答:1

这里有一个在文档加载时注册函数的例子(大部分摘自 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);});

我的代码在哪些方面更好/更差?

javascript dom-events
1个回答
2
投票

我对

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

这不是自我调用。

这是对函数

onLoad
(先前定义的)的调用,带有一个参数(这是一个函数表达式)。

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

您的代码将:

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