【发布时间】:2021-07-23 13:38:37
【问题描述】:
根据 MDN:
在客户端 JavaScript 中,全局范围通常是所有代码都在其中执行的网页。
现在由于 HTML 网页加载时的提升(即全局范围的开始),所有全局变量都应创建并初始化为 undefined。
为了测试这一点,我创建了三个文件:
test.html:
<html>
<head>
</head>
<body>
<script src = "test2.js"></script>
<script src = "test1.js"></script>
</body>
</html>
test2.js:
alert(g); // ReferenceError: g is not defined (web browser console)
function increment()
{
g = g + 1;
}
test1.js:
var g = 1;
increment();
alert(g); // alert's 2
为什么 test2.js 中的 alert(g) 会导致 ReferenceError?为什么g 的声明没有提升到全局范围的开头?
我认为g 的声明没有提升到全局范围的开头,因为如果是这样,g 必须在 test.html 加载时创建并初始化为 undefined,因此 alert(g)在 test2.js 中应该提醒 undefined。
【问题讨论】:
标签: javascript scope hoisting