使用window.onload = function(){}是否有任何真正的好处; over onload = function(){}; ?我知道window.onload看起来更合适,但这不是我选择它的好理由,特别是它比onload更长/更慢。
经过一些耗时的搜索和测试后,这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://perfectionkills.com/onloadfunction-considered-harmful/
它声明ECMA-262 5th edition的严格模式(“use strict”; 我不打算在我的项目中使用它)最终会导致某些浏览器与onload不兼容(ReferenceError)在Firefox和Opera中。
所以问题是:除了“use strict”之外,使用直接onload赋值是否有任何真正的缺点?一?我需要的信息不是一些无法解释的意见。
由于
注意:我在问这个问题之前做了搜索(我知道这看起来有点经典),我能找到的最接近的问题是 window.onload vs< body onload =“ “> , window.onload的其他替代方案等。
编辑:我创建了此测试用例onload vs window.onload,这证明了onload的速度有多快。我真的会去做这种微观优化,为什么不呢?它们有时很酷。
答案 0 :(得分:3)
两者都是相同的...当你自己调用onload时,javascript假定它是一个全局属性,它是window对象的属性。所以基本上如果你没有特别说它是window.onload那么javascript引擎会为你做。
if (onload === window.onload) {
alert("it's the same"); //true
}
因此,只要您不关心严格模式,就不应该对现代浏览器有任何问题。但是,使用完整的window.onload而不仅仅是onload被认为更好。没有输入额外的7个字符,你获得的收益并不高。
答案 1 :(得分: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,代码可能无效。