2 回答
TA贡献1794条经验 获得超8个赞
举个例子就知道了。
<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 代码分次被解析,但是他们拥有同一个全局作用域。
添加回答
举报