5

使用 window.onload=function(){}; 有什么真正的优势吗?超过 onload=function(){}; ? 我知道 window.onload 看起来更合适,但这不是我选择它的好理由,尤其是它比 onload 更长/更慢。

经过一些耗时的搜索和测试,这 2 种是仅有的 2 种浏览器兼容方法,测试(在相对较新的 Chrome/Firefox 版本和 5.5 到 9 的 IE 上)包括:

window.onload // works in all tested browsers
onload // works in all tested browsers, faster than window.onload
document.onreadystatechange // works twice in some browsers, once in some others, could be confusing
window.onpageshow // works in chrome and firefox, not in IE
window.onreadystatechange // doesn't work
document.onload // doesn't work
document.onpageshow // doesn't work
window.document.onload // doesn't work

我可以找到这篇文章,这是最适合我的问题的文章之一:

http://perfectkills.com/onloadfunction-considered-harmful/

它指出ECMA-262 第 5 版的严格模式(“使用严格”;我不打算在我的项目中使用)最终可能导致某些浏览器不兼容加载(Firefox 和 Opera 中的 ReferenceError)。

所以问题是:除了“使用严格”之外,使用直接加载分配是否有任何真正的缺点?一?我需要信息而不是一些无法解释的意见。

谢谢

注意:我在问这个问题之前进行了搜索(我知道这看起来有点经典),我能找到的最接近的问题是关于window.onload 与 <body onload="">window.onload 的其他替代方案等。

编辑:我创建了这个测试用例onload vs window.onload,它证明了 onload 有多快。我真的会进行这种微优化,因为为什么不呢?他们有时会很酷。

4

2 回答 2

3

两者都是相同的......当您自己调用 onload 时,javascript假定它是一个全局属性,它是窗口对象的一个​​属性。所以基本上如果你没有特别说它是 window.onload 那么javascript引擎会为你做。

if (onload === window.onload) {
   alert("it's the same");  //true
}

因此,只要您不关心严格模式,现代浏览器就不应该有任何问题。但是,使用完整的 window.onload 而不是仅使用 onload 会更好。通过不输入额外的 7 个字符,您不会获得太多收益。

于 2013-07-04T15:49:54.337 回答
1

所有全局函数和变量都在 window 对象内。因此,当您使用时,onload您正在使用window.onload.

在命名空间内调用某些东西时,您会付出性能代价:它必须先获取对象窗口,然后再获取属性 onload。

在没有窗口的情况下调用全局变量时,您可能会在其范围内重新定义它:

function () {
  var onLoad = function() {alert("foo")};
  function () {
    onLoad();
  }
}

在此示例中,onload 警报“foo”;

所以你问are there any real disadvantages related to using the direct onload assignment

onload 可能会被重新定义,代码可能无法正常工作。

于 2013-07-04T16:03:06.767 回答