我在某处读到访问window.location.href比使用location.href更多的时间。为什么会这样?当我们说“window.location.href”时,JS引擎在全局对象“窗口”中搜索“location”成员,同样应该只发生“location.href”,这里JS引擎也会在窗口中搜索位置成员对象本身。 当两个表达式的成员看起来相同时,为什么它们之间存在时间差异。为了看到差异,我在浏览器控制台中运行了以下代码:
function performance(){
var a;
console.time('way1');
for(var loop = 0; loop < 100000; loop++){
a = window.location.href;
}
console.timeEnd('way1');
console.time('way2');
for(var loop = 0; loop < 100000; loop++){
a = location.href;
}
console.timeEnd('way2');
}
performance();
way1循环大约需要51ms,而way2大约需要35ms的chrome。会有什么区别?
答案 0 :(得分:1)
location
是对window.location
的引用。
现在,如果你使用location.href
,javascript引擎将必须在location
的本地范围内查找,如果没有找到,它将检查父范围,直到达到全局范围,然后获取它的href
属性。
如果您使用window.location.href
,则引擎必须首先在本地范围内查找window
,如果找不到,请检查父范围,直到达到全局范围。找到后,获取它的location
属性,然后获取href
的{{1}}属性。
因此,两种情况之间还有一个查找步骤,这就是为什么相信两者的性能略有不同。