我将以下代码插入到html文件中:
<script>
console.log(myVar);
var myVar = 1;
</script>
&#13;
在浏览器中打开此html页面后,myVar的值将是未定义的。 据我所知,这是javascript中的正常行为,因为它首先设置 内存空间然后它执行代码。
现在奇怪的部分是,如果我们将此分割为同一个html页面:
<script>
console.log(myVar);
</script>
<script>
var myVar = 1;
</script>
&#13;
结果将是:未捕获的ReferenceError:未定义myVar
为什么?
这不是关于变量的范围,而是关于提升,似乎提升仅在javascript块内,并且不适用于其他javascript块中的整个加载页面。这里的例子相同:
<script>
myFunc();
function myFunc() {
console.log('Hello!');
}
</script>
VS
<script>
myFunc();
</script>
<script>
function myFunc() {
console.log('Hello!');
}
</script>
&#13;
答案 0 :(得分:2)
在上面的代码中,<script>
首先呈现console.log(myVar)
,系统在全局和本地范围内查找myVar
变量。因为,在此点之前找不到该变量,所以Uncaught ReferenceError: myVar is not defined
错误会在下一个var myVar = 1;
块中呈现<script>
错误。
<script>
console.log(myVar);
</script>
<script>
var myVar = 1;
</script>
&#13;
但是,当您将<script>
块的顺序更改为类似下面的内容时,它将起作用
<script>
var myVar = 1;
</script>
<script>
console.log(myVar);
</script>
&#13;
答案 1 :(得分:0)
MyVar现在在第二个示例的范围内定义(即使它可能在示例1中)。在最后一段代码中,声明了myVar。 我高兴地推荐阅读JavaScript(和Java)中的变量范围
答案 2 :(得分:0)
为什么呢?因为第一个脚本运行时不考虑第二个脚本。您描述的行为,在执行代码之前首先声明所有变量,仅适用于每个单独的代码块。