在全局范围重定向中分配`var stoput''到不存在的文件



我有一个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文档。

最新更新