2 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
舉個(gè)例子就知道了。
<script>
var a = 1
</script>
<script>
console.log(a) // 1
</script>
這說(shuō)明<script>標(biāo)簽中的代碼執(zhí)行后并沒(méi)有釋放關(guān)閉。
我又試了試:
<script>
console.log(a) // 報(bào)錯(cuò) Uncaught ReferenceError: a is not defined
</script>
<script>
var a = 1
</script>
這說(shuō)明兩個(gè)<script>標(biāo)簽中的代碼并不存在變量提升,這是為什么呢?
我又試了試這個(gè):
<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>
后面標(biāo)簽中的代碼會(huì)執(zhí)行,打印 1.
我個(gè)人的理解:
這和瀏覽器中 UI 線程、JS 解析線程有關(guān)
<script>
標(biāo)簽是瀏覽器中的 UI 線程負(fù)責(zé)解析的,并且一個(gè)<script>
標(biāo)簽就是一個(gè)代碼塊兒,而<script>
中的代碼是 JS 解析線程負(fù)責(zé)解析的這兩個(gè)
<script>
中的代碼他們擁有同一個(gè)全局作用域,但是因?yàn)樗鼈兪欠珠_渲染與解析的:
所以:也就是說(shuō),每個(gè)<script>
標(biāo)簽先由 UI 線程渲染,再由 JS 線程解析,JS 代碼分次被解析,但是他們擁有同一個(gè)全局作用域。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
添加回答
舉報(bào)