繁体   English   中英

在全局 scope 中分配 `var location` 重定向到不存在的文件

[英]Assigning `var location` in global scope redirects to non-existent file

我有一个 HTML 文件test.html ,其中有两个变量都命名为location ,一个是全局的,一个是本地的。 但是当我在浏览器中打开它时,它只是说Your file was not found ,并且地址栏显示file://Los%20Angeles而不是预期的file://test.html 为什么?

<html>
<body>
<script type="text/javascript">
var location = "Los Angeles"
function showLocation() {
    var location = "San Francisco"
    document.write(location)
}
</script>
<input type="button" onclick="showLocation()" value="Show Location"/>
</body>
</html>

'location'是javascript中的保留关键字。 只需将变量名更改为其他名称即可。 有关保留字的更多信息: https : //www.w3schools.com/js/js_reserved.asp

设置全局location会使浏览器转到该URL。 它不是保留字,而是在window对象上定义的变量。 这是一个更好的保留字列表:

https://docs.microsoft.com/zh-CN/scripting/javascript/reference/javascript-reserved-words

在您的示例中,您将全局location设置为“ Los Angeles”,这将导致窗口导航到该位置,就好像它是一个相对URL。

在函数内部设置var location = "San Francisco"对窗口对象无效,因为函数变量具有自己的作用域。

因此,您可以这样做:

function showLocation() {
    var location = "San Francisco"
    document.write(location)
}

它将按预期工作。 它将字符串“ San Francisco”写入文档。

如果您使用的是现代浏览器,则可以通过尝试使用“ let”设置“ location”来查看发生了什么:

let location = "los angeles"

现在,您将收到一条错误消息,内容如下:

SyntaxError:无法创建覆盖全局属性的重复变量:“位置”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM