html本身无全局变量概念,所谓“全局变量”实为javascript将var声明或显式挂载到window对象的属性;let/const因块级作用域不会自动挂载,故不可跨script访问。

HTML 里根本没有全局变量这个概念
HTML 是标记语言,不是编程语言,它本身不支持变量声明。你看到的所谓“全局变量”,实际是 JavaScript 在浏览器环境里挂载到 window 对象上的属性,或者用 var 声明在全局作用域的变量——但这是 JS 的行为,和 HTML 无关。
怎么让 JS 变量在多个 script 标签里都能用
常见场景:一个 <script></script> 里定义了配置,另一个里想读取。关键不是“写在哪”,而是“什么时候执行”和“挂到哪”。
- 把定义变量的
<script></script>放在或页面顶部,确保它先执行 - 用
var config = {apiUrl: 'https://api.example.com'};(注意不用let/const,它们不会挂到window) - 或者显式挂载:
window.API_BASE = 'https://api.example.com'; - 后续所有
<script></script>都能直接访问config或API_BASE
为什么用 let/const 声明的变量不行
let 和 const 是块级作用域,即使写在最外层脚本里,也不会自动成为 window 的属性。这是 ES6 明确规定的,不是 bug。
比如:
一个让ASP程序轻松做最少的代码编写量,一般企业所需要的功能都有,参数设置,数据库管理,文件管理,数据初始化,生成HTML页面(这是为了某些客户需要静态页面的需求),页面管理(这里是为了网站中某些单页面需求而开发的,这里你在前台只要用sub_c.article(2) 这个2是这里的id号,也可以是在比如index.asp?id=2 是一样的效果)公告管理,友情链接,信息发布(这里有分类,分类是无限
立即学习“前端免费学习笔记(深入)”;
let user = 'admin'; console.log(window.user); // undefined
而:
var user = 'admin'; console.log(window.user); // 'admin'
容易被忽略的加载顺序和作用域污染问题
很多人以为只要变量名没冲突就安全,其实不然。
- 多个第三方脚本都用
var $或var _,会互相覆盖 - 异步加载的
<script async></script>或动态插入的脚本,执行时机不可控,可能读不到前面定义的变量 - 现代项目用模块化(ESM),
import/export才是正解,window挂载只是临时兼容手段
真要跨脚本共享数据,优先考虑 localStorage、CustomEvent 或封装成 IIFE 模块,而不是依赖 window 上的裸变量。









