【发布时间】:2026-01-03 12:25:01
【问题描述】:
我试图理解 JavaScript 中的作用域。如果我在函数之外声明一个变量,它就是 GLOBAL。因此,我测试了以下代码以了解执行顺序。在下面的代码中,我希望“demo1”采用全局值,即“Volvo”,因为我在函数内声明具有相同名称的局部变量之前渲染了该文本。但令我惊讶的是,我看到该值是“未定义的”。
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<p id="demo1"></p>
<p id="demo2"></p>
<script>
var carName = "Volvo";
myFunction();
document.getElementById("demo").innerHTML = carName;
function myFunction() {
document.getElementById("demo1").innerHTML = carName;
var carName = "Volvo1";
document.getElementById("demo2").innerHTML = carName;
}
</script>
</body>
</html>
结果:
Volvo
undefined
Volvo1
我进一步修改看看如果在函数内声明另一个全局变量会发生什么,如下所示:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<p id="demo1"></p>
<p id="demo2"></p>
<script>
var carName = "Volvo";
myFunction();
document.getElementById("demo").innerHTML = carName;
function myFunction() {
document.getElementById("demo1").innerHTML = carName;
//declaring another global variable
carName = "Volvo1";
document.getElementById("demo2").innerHTML = carName;
}
</script>
</body>
</html>
结果:
Volvo1
Volvo
Volvo1
这次“demo1”假定在函数外部声明的全局变量,即“Volvo”。
谁能给我解释一下?
【问题讨论】:
-
在这种情况下,值不应该是“Volvo1”吗?
标签: javascript html scope variable-declaration hoisting