一:函數聲明與函數定義表達式在函數調用間的區別javascript
<script type="text/javascript"> doA(); var doA = function(argument) { console.log('執行了') } </script>
結果:java
<script type="text/javascript"> doA(); function doA(argument) { console.log('執行了') } </script>
結果:執行了函數
結論:函數聲明在編譯期處理了函數聲明,可是函數定義表達式並無初始化與賦值。相似聲明瞭一個變量,可是變量沒有賦值。spa
二:多個script之間對於變量的關係code
JS是按照代碼塊來進行編譯和執行的,代碼塊間相互獨立,但變量和方法共享。blog
<script type="text/javascript">
function doA(argument) { console.log('執行了') } </script>
<script type="text/javascript"> doA(); </script>
結果:執行了ip
**若是兩個函數塊之間更換位置,那就會報錯。io
<script type="text/javascript">
var a = 0; </script>
<script type="text/javascript"> console.log(a); </script>
結果:0console
**若是兩個函數塊之間更換位置,那就會報錯。編譯
三:這樣就形成了一個問題,當咱們一個頁面中引入多個js的時候,可能會形成全局變量的污染。
咱們能夠這麼作來避免:
<script type="text/javascript">
var a = 0; </script>
<script type="text/javascript"> ;(function(){ var a = 1; console.log(a); })(); console.log(a); </script>
<script type="text/javascript">
function bigDoA(argument) { var a = 0; //其餘代碼
} </script>
<script type="text/javascript">
function bigDoB(argument) { var a = 0; //其餘代碼
} </script>