JavaScript中變量提升

JavaScript中變量提升詳解

ES6之前我們一般使用var來聲明變量,提升簡單來說就是把我們所寫的類似於var a = 1這樣,聲明提升到它所在作用域的頂端去執行,到我們代碼所在的位置來賦值。

如下:這種情況下輸出undefined,變量提升 相當於 var a; (變量定義)提升 , 賦值停留在原地

   		console.log(a);  
         var a = 1; 
        //undefined  變量定義了 但是沒有給變量賦值
        // 變量提升 相當於  var a; (變量定義)提升 , 賦值停留在原地

        // var a;
        // console.log(a);  
        // a = 1;

多個script標籤的情況下:變量提升不能跨標籤

  <script>
        // console.log(a);/  報錯  
    </script>
    <script>
        //  var a = 1;
    </script>
//變量提升不能跨標籤

其他情況:

1.在if語句裏面:

<script>
	 console.log(a);
        // a = 1;
        // 在if語句裏面

        // console.log(a); // 未定義 1  報錯 2 
        // if(false){
        //    var a =1; 
        // }
        // 寫在if語句裏面 也是存在變量提升 
        // 雖然if沒有執行 ture裏面的內容 但是也存在變量的提升
     //在js裏面 var 存在變量聲明提升  如果先使用變量 只會知道 它已經存在 但是如果是在
        //    使用之後賦值  我們只能輸出未定義
</script>

2函數

<script>
	 // myFuncA(); // 1   2
        // function myFuncA() { //函數具有預編譯能力 
        //   alert("哈哈A");
        // }

        console.log(a);
        var a = 10;
        console.log(a);
        function a(){
           console.log("我是A");
        }
        console.log(a);
		輸出:undefined 10 10.
        //函數會優先變量  先提升

        // function a(){
        //    console.log("我是A");
        // }
        // var a;
</Script>

3

<script>
	console.log(a);  
        a = 1; //報錯
    這裏要區分和我們第一種的情況
    第一種定義了var a=1;
    而這裏只是a=1;
    我們說過 第一種情況相當於  var a; (變量定義)提升 , 賦值停留在原地
    而這裏沒有定義則是報錯
</script>

4

		console.log(b);
        b();
        
        var b = function(){
            console.log(1);
        }
        // b 是一個變量  只是把一個匿名函數賦值給了變量 b
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章