举个例子就知道了。<script> var a = 1</script><script> console.log(a) // 1</script>这说明<script>标签中的代码执行后并没有释放关闭。我又试了试:<script> console.log(a) // 报错 Uncaught ReferenceError: a is not defined</script><script> var a = 1</script>这说明两个<script>标签中的代码并不存在变量提升,这是为什么呢?我又试了试这个:<script> console.log(a) // Uncaught ReferenceError: a is not defined var b = 1 console.log(b)</script><script> var a = 1 console.log(a); // 1</script>后面标签中的代码会执行,打印 1.我个人的理解:这和浏览器中 UI 线程、JS 解析线程有关<script>标签是浏览器中的 UI 线程负责解析的,并且一个<script>标签就是一个代码块儿,而<script>中的代码是 JS 解析线程负责解析的这两个<script>中的代码他们拥有同一个全局作用域,但是因为它们是分开渲染与解析的:所以:也就是说,每个<script>标签先由 UI 线程渲染,再由 JS 线程解析,JS 代码分次被解析,但是他们拥有同一个全局作用域。