[英]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.