脚本范围的目的是啥?
Posted
技术标签:
【中文标题】脚本范围的目的是啥?【英文标题】:What is the purpose of the script scope?脚本范围的目的是什么? 【发布时间】:2017-04-02 18:55:21 【问题描述】:在 DevTools 控制台中检查函数的范围时,我注意到一个“脚本”范围。经过一番研究,它似乎是为let
和const
变量创建的。
没有const
或let
变量的脚本中函数的范围:
带有let
变量的脚本中函数的作用域:
然而,控制台中会打印出1
- 脚本范围内的变量仍然可以从其他脚本访问:
<script>let v = 1</script>
<script>console.log(v)</script>
我听说过 ES6 模块,其中***变量无法从模块外部访问。这是作用域的用途还是有其他用途?
【问题讨论】:
【参考方案1】:当您在顶层使用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>
【讨论】:
在什么情况下 let 变量test2
not 可以访问? <script src="...">
标签?如果它在页面上的所有脚本中都可用,它怎么不是全局的?
@samson 这取决于您如何定义“全局”。在 javascript 中,“全局”通常意味着“可以从任何地方访问和全局对象的属性(浏览器中的window
,Node.js 中的global
)”。如果您将其定义为“可从任何地方访问”,那么可以——在顶层使用 let
定义的变量是全局变量。以上是关于脚本范围的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章