javascript - 有人可以帮我理解下面的代码块吗?

标签 javascript

我对下面的代码块有点困惑。我将在每一行旁边评论我认为它的含义。如果有人可以帮助我澄清我的任何误解或确认我实际上正确解释它,我将非常感激。

以下是上下文中的代码:http://jsfiddle.net/MddHtt13/EMBZr/1/

  if(!window.onload) { // If the window is not loaded then...
        window.onload = function() { //Assign an anonymous function to the onload event
            onLoad(); //Which, upon execution of the onload event execute the onLoad function
        };
    }
    else { //This is probably the most confusing part
        var oldWindowLoadFunction = window.onload; //Else if the window is loaded, assign the onload event to the variable oldWindowLoadFunction
        window.onload = function() {  //Then upon completion of the onload event, assign an anonymous function 
            oldWindowLoadFunction(); //which then re-executes the onload event 
            onLoad(); //and then executes the onLoad function 
        };
    }

我首先不明白的是window.onload旁边的感叹号

if(!window.onload)

为什么我需要指定窗口是否尚未加载?难道我只想将 onLoad() 函数附加到 onload 事件,以便在完成后触发它吗?可以这样说:

window.onload = onLoad();

为什么要采取额外的步骤?为什么要使用 if/else 语句?

<小时/>

其次,为什么在代码块的后半部分我需要重新加载页面才能再次重新附加 onLoad() 函数?这让我回到了我刚才问的问题。为什么它必须比简单地编写更复杂:

window.onload = onLoad();

当然,当我将代码更改为简单的语句(如上面的代码)时,它实际上不起作用。但是,我仍然不完全理解所讨论的代码块的每个部分的必要性。
如果有人可以详细地引导我完成这个过程,那将会非常有帮助。

编辑:
感谢下面的人的帮助,我用一个简单的语句替换了所有这些代码:

window.addEventListener('load', onLoad);

最佳答案

! 是一个 bool 反转:如果 not window.onload 为 null 或未定义,或者用更简单的英语来说,如果名为 onload 的变量> 名为 window 的对象中不为 null 或未定义。

逻辑基本上是说,如果没有 onload 函数,请安装我的。如果有 onload 函数,请安装一个新的包装函数,该函数调用现有函数,然后调用我的函数。

没有任何代码“重新加载”页面。您将 onload 处理程序的分配与加载页面混淆了。

该函数正在执行的操作是向窗口对象添加 onload 功能,该对象可能已经通过将添加的函数链接到原始函数而具有 onload 功能,但仅在必要时

在当今世界,这一切都是多余的,因为您只需将事件监听器添加到要为 onload 事件执行的函数列表中即可。

关于javascript - 有人可以帮我理解下面的代码块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261057/

相关文章:

javascript - 使用 <canvas> 在 JavaScript 中实现 Conway 的生命游戏

javascript - 由css和js设计的图像旋转

javascript - 如何在 Selenium 中保存 Tampermonkey 脚本?

javascript - 使用名称 "in"的 Socket.io 使 Webstorm IDE 引发错误

javascript - 在MVC中使用第三方javascript

javascript - 避免 ontextchange 事件中的回传

php - 如果用户禁用了 javascript,如何回退到完全不同的索引页面?

javascript - ruby gem : Get files in asset pipeline

javascript - Backbone & Underscore 未定义,加载思想

javascript - 在 JavaScript 回调函数中设置局部变量