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 代碼分次被解析,但是他們擁有同一個全局作用域。
添加回答
舉報