當頁面中存在多個<script>標簽時,這時編譯器會將多個標簽處理成一個還是將多個分開處理呢,
看下面的代碼:
<script> alert(a); </script> <script> var a = 123; </script>
這段代碼會報 Uncaught ReferenceError: a is not defined 的錯誤,而不是undefined,所以可以看出編譯器是按塊進行編譯的,
也就是說是按script標簽一塊一塊進行編譯的,在第一個塊中,並沒有聲明a變量,(這也證明了a變量並沒有被聲明提前,直到第二個script內部才被提前的。)所以才會彈出這個錯誤,而不是undefined。
在看一個例子:
<script> var b = 111; </script> <script> alert(b); </script>
這段代碼的運行的結果是111,這說明了,雖然編譯不是同時進行的,但作用域始終還是一個,只是編譯器編譯的時候是一個塊一個塊從上向下進行編譯的。