0

定义我所用的开发工具在Chrome 13,当我输入这行:全球定位在Chrome 13

var location = "Hello"; 

按Enter,改变了页面,并给了我一个404错误。地址栏现在有Hello追加到最后的地址。

http://www.google.com/Hello

我发誓,我输入了完全相同的线路了Chrome在过去,而不是有同样的问题。我认为位置在window.location

有什么改变,或者我以前从未注意到这一点?

回答

2

开发人员工具中的上下文为window是非常正常的。输入this并查看说的是什么。这可能是window

因此,当你键入:

var location = "Hello"; 

您正在试图重新定义已经存在的全球范围内的变量。浏览器中的全局范围是window对象。因此,全球范围内的locationwindow.location相同。

正在试图重新定义已经存在(通过使用var)的对象不是在JavaScript错误。它只是忽略了var声明并完成了一项任务。并且,将位置对象的字符串分配给新的网页。

+0

现在想想看,这很明显。我在这里输入了,而事实上,它是窗口对象。我很惊讶,我以前从未注意到这一点。 – Jonathan

2

Chrome可能已经更改了其范围规则。我不清楚在控制台上的var应该被视为窗口范围还是某个神秘的控制台范围。

如果你想创建一个变量命名的位置,你应该使用一个立即函数创建一个安全的范围内,例如。例如。

(function(){ 
    var location = "hello"; // safe 
})(); 
+1

它将在全局范围内执行,并且'location'已经在那里存在。所以它会重写'location',这会导致导航。就像'var foo = 123'会导致'window.foo === 123'。 – pimvdb

+0

谢谢@pimwdb,我这么认为。我不记得自从我最后一直坚持使用铬以来,是否有13人以这种方式工作:/ – jimbojw

+0

是的,我完全同意包装你的代码是一条可行的路。原来jfriend00是正确的,因为开发人员工具的上下文是窗口.. – Jonathan