脚本范围的目的是什么?

时间:2016-11-18 20:15:12

标签: javascript scope ecmascript-6 let

在DevTools控制台中检查函数的范围时,我注意到了一个“脚本”范围。经过一些研究后,似乎是为letconst变量创建的。

没有constlet变量的脚本中函数的范围:

the global scope

带有let变量的脚本中函数的范围:

a global scope and a script scope

然而,以下在控制台中打印1 - 脚本范围中的变量仍然可以从其他脚本访问:

<script>let v = 1</script>
<script>console.log(v)</script>

我听说过ES6模块,其中顶层变量无法从模块外部访问。这是范围用于或是否有任何其他目的?

1 个答案:

答案 0 :(得分:7)

当您在顶层使用var声明变量时(即不在函数内),它会自动变为全局变量(因此在浏览器中您可以将其作为window的属性进行访问) 。它与使用letconst声明的变量不同 - 它们不会成为全局变量。您可以在另一个脚本标记中访问它们,但不能将它们作为window的属性进行访问。

见这个例子:

<script>
  var test1 = 42;
  let test2 = 43;
</script>
<script>
  console.log(test1); // 42
  console.log(window.test1); // 42
  console.log(test2); // 43
  console.log(window.test2); // undefined
</script>