在DevTools控制台中检查函数的范围时,我注意到了一个“脚本”范围。经过一些研究后,似乎是为let
和const
变量创建的。
没有const
或let
变量的脚本中函数的范围:
带有let
变量的脚本中函数的范围:
然而,以下在控制台中打印1
- 脚本范围中的变量仍然可以从其他脚本访问:
<script>let v = 1</script>
<script>console.log(v)</script>
我听说过ES6模块,其中顶层变量无法从模块外部访问。这是范围用于或是否有任何其他目的?
答案 0 :(得分:7)
当您在顶层使用var
声明变量时(即不在函数内),它会自动变为全局变量(因此在浏览器中您可以将其作为window
的属性进行访问) 。它与使用let
和const
声明的变量不同 - 它们不会成为全局变量。您可以在另一个脚本标记中访问它们,但不能将它们作为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>