You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:04:51