我有一个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>
'位置'是JavaScript中的保留关键字。只需将您的变量名称更改为其他。有关保留单词的更多信息:https://www.w3schools.com/js/js_resverve.asp
设置全局location
会导致浏览器转到该URL。这不是一个保留的单词 1 - 它是在全局对象上定义的属性(globalThis
,网络中的window
)。
在您的示例中,您将全局location
设置为"Los Angeles"
,这会导致浏览器导航到相对URL。
在您的函数内部设置var location = "San Francisco"
对窗口对象没有影响,因为函数内部的运行执行上下文具有其自身的变量环境,这与全局范围中的一个不同。
因此您可以这样做:
function showLocation() {
var location = "San Francisco";
document.write(location)
}
它将按预期工作。它将将字符串"San Francisco"
写入文档。
如果您正在现代浏览器上
let location = "los angeles";
现在,您将遇到一个错误的错误:
SyntaxError
:无法创建阴影全局属性的重复变量:'location
'。
1 :如果您想知道javaScript中的保留单词是什么,请查看MDN文档。