访问全局变量的嵌套成员可能不同
accessing nested member of global variable can be different
我在哪里读到访问window.location.href比访问location.href更耗时。为什么会这样?当我们说"window.location.href"时,JS引擎在全局对象"window"中搜索"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();
路1循环大约需要51毫秒,路2循环大约需要35毫秒。会有什么不同?
location
是对window.location
的引用。
现在,如果您使用location.href
,javascript引擎将不得不在本地作用域查找location
,如果找不到,它将检查父作用域,直到到达全局作用域,然后获取其href
属性。
如果使用window.location.href
,则引擎必须首先在本地作用域中查找window
,如果找不到,则检查父作用域,直到到达全局作用域。一旦找到,就得到它的location
属性,然后得到window.location
的href
属性。
因此,在这两种情况之间还有一个查找步骤,这就是为什么a认为两者的性能略有不同。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在page.open()-PhantomJS中无法访问全局变量
- 使用全局变量来存储数字(JavaScript)
- 如何将变量声明为全局变量
- 在节点中创建文件全局变量
- 在Javascript中使用全局变量作为缓存是很好的
- 创建要在其他函数中使用的全局变量
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 函数中的innerHTML(全局变量?)
- 如何在javascript中为全局变量赋值
- 全局变量只能由第一个函数访问
- 访问全局变量的嵌套成员可能不同