使用window.onload=function(){};相对于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第五版模式(“使用严格”;我不打算在我的项目中使用)最终会导致一些浏览器不兼容onload (火狐和歌剧中的ReferenceError)。
因此,问题是:除了“使用严格的”外,使用直接的负载分配是否有真正的缺点?我需要信息,而不是一些无法解释的意见。
谢谢
注意:我在问这个问题之前就搜索过了(我知道这个问题看起来有点经典),我能找到的最接近的问题是关于window.onload vs ,以及window.onload的其他替代方案等等。
编辑:--我已经创建了这个测试用例有载vs window.onload,它证明了加载的速度有多快。我真的会选择这样的微观优化,因为为什么不呢?他们有时会很酷。
发布于 2013-07-04 15:49:54
两者是一样的..。当您单独调用onload时,javascript假设它是一个全局属性,它是window对象的一个属性。因此,基本上,如果您不明确地说它是window.onload,那么javascript引擎将为您做这件事。
if (onload === window.onload) {
alert("it's the same"); //true
}因此,只要您不关心严格的模式,您就不应该对现代浏览器有任何问题。然而,使用完整的window.onload而不仅仅是onload被认为更好。如果不键入额外的7个字符,您就不会获得太多的收益。
发布于 2013-07-04 16:03:06
所有全局函数和变量都在窗口对象中。因此,当您使用onload时,您使用的是window.onload。
在名称空间中调用某些内容时,需要付出性能代价:它必须获得对象窗口,然后才能加载属性。
在没有窗口的情况下调用全局变量时,可能会在其作用域中重新定义该变量:
function () {
var onLoad = function() {alert("foo")};
function () {
onLoad();
}
}在本例中,onload警报"foo";
所以你问are there any real disadvantages related to using the direct onload assignment
可以重新定义onload,代码可能无法工作。
https://stackoverflow.com/questions/17473675
复制相似问题