1. 程式人生 > >JavaScript 變數的提升以及var對變數的提升

JavaScript 變數的提升以及var對變數的提升

JavaScript宣告過的變數提升往往會影響到我們對變數的正常獲取,所以特寫此文,以便以後使用  。

一  那麼什麼是變數提升呢

      js中定義變數的兩種:(注意在方法外不加var是不能定義變數的,出現 xxx is not defined)

  1. 都加var,在方法內則是區域性變數,在方法外則是全域性變數。
  2. 在方法內,加var為區域性變數,不加var則是全域性變數(在執行當前方法之後) 
<script type="text/javascript">
   //變數宣告的提升
   function text1(){
	   var a = "1";
	   var b = "3";
	   var c = function(){};
	   var d = "4";
   }
   
 //上述程式碼等價於
   function text2() {
	    var a,b,c,d;
	    a = "1";
	    b = "2";
	    c = function(){};
	    d = "3";
	}
</script>

變數提升案例

案例1

由於test1函式裡面定義了變數a,由於

var a = 'I\'m a in all'

function test1 () {
    console.info(a)
    console.info(window.a)

    var a = 'I\'m a in test1'
    console.info(a)
}
    
test1()
上述程式碼相當於
var a = 'I\'m a in all'

function test1 () {
    var a
    console.info(a)            // undefined
    console.info(window.a)    // I'm a in all(因為window指的是全域性環境)

    a = 'I\'m a in test1'
    console.info(a)           // I'm a in test1
}
    
test1()

 案例2


var a = 'I\'m a in all'

function test2 () {
    console.info(a) // I'm a in all

    a = 'I\'m a in test2'      // 這裡原本就是賦值,所以上邊的a會輸出全域性變數
    console.info(a)            //  I'm a in test2
}

 案例3

function test3 () {
    console.info(a) // 報錯(Uncaught ReferenceError: a is not defined)

    a = 'I\'m a in test3' // 這裡本來就是賦值,所以上邊的a會輸出全域性變數
    console.info(a) // I'm a in test3
}

test3()

console.info(a) // I'm a in test3(本來沒有全域性變數a,當test3執行時,定義了一個全域性變數a,所以這裡會輸出)

最終頁面展示:

sa