script标签中let声明变量为何跨标签可访问?
为什么第二个
<script>标签能访问第一个里的let变量? 核心问题出在对“块级作用域”的误解:
<script>标签本身并不是let定义的块级作用域载体,它只是浏览器用来分段执行代码的单元,所有顶级<script>标签内的代码,都运行在同一个全局执行上下文里。let的块级作用域,是由{}包裹的代码块创建的——比如if语句块、for循环块,或者直接写的独立{}代码块,这些才是真正的“块级作用域”边界。
看这个修改后的对比例子就一目了然:
<script> { // 这里是真正的块级作用域 let a = 1; console.log(a); // 输出 1 } </script> <script> console.log(a); // 报错:a is not defined </script>
- 回到你的原代码,第一个
<script>里的let a = 1是在全局作用域下声明的(因为没有被{}包裹),所以第二个<script>作为全局作用域的一部分,自然能访问到这个变量。
内容的提问来源于stack exchange,提问作者a Learner
相关产品推荐
相关产品推荐

