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