【问题标题】:Location globally defined in Chrome 13Chrome 13 中全局定义的位置
【发布时间】:2011-11-18 22:17:50
【问题描述】:

当我输入这一行时,我正在使用 Chrome 13 中的开发者工具:

var location = "Hello";

按下回车后,页面发生了变化,并给了我一个 404 错误。地址栏现在已将Hello 附加到最后一个地址。

http://www.google.com/Hello

我发誓我过去在 Chrome 中输入过完全相同的行,并且没有遇到同样的问题。我以为位置在window.location。

发生了什么变化,还是我以前从未注意到这一点?

【问题讨论】:

    标签: javascript google-chrome google-chrome-devtools window.location


    【解决方案1】:

    开发人员工具中的上下文为window 是完全正常的。输入this 并查看内容。应该是window。

    因此,当您键入时:

    var location = "Hello";
    

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

    尝试重新定义已经存在的对象(通过使用var)在 javascript 中不是错误。它只是忽略var 声明并进行赋值。并且,将字符串分配给位置对象,然后转到新网页。

    【讨论】:

    • 现在想想,这很明显。我输入了这个,是的,事实上,它是窗口对象。我只是很惊讶我以前从未注意到这一点。
    【解决方案2】:

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

    如果您想创建一个名为 location 的变量,您应该创建一个安全范围,例如使用立即函数。例如

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

    【讨论】:

    • 它将在全局范围内执行,并且location已经存在那里。所以它会覆盖location,这将导致导航。就像var foo = 123 会导致window.foo === 123。
    • 谢谢@pimwdb,我是这么认为的。我不记得 13 是否那样工作,因为我一直在使用最新的铬:/
    • 是的,我绝对同意包装你的代码是要走的路。原来 jfriend00 是正确的,因为开发者工具的上下文是 window..
    • 是的,window 似乎是一般 chrome 的默认范围。我在我们的内部系统上有一个旧页面,该页面在一个脚本块中创建了全局变量(其中一个称为位置),该脚本块在 IE 中运行良好多年。在 Chrome 中打开它,一切都下地狱了。
    猜你喜欢
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多