1. 程式人生 > 其它 >js中變數及函式的提升

js中變數及函式的提升

技術標籤:jsjsjavascript前端

js中變數及函式的提升

思考:下列程式碼輸出什麼
在這裡插入圖片描述
結果: 控制檯輸出:1
為什麼???
這就涉及到js中變數和函式的提升了。
js在解析程式碼時,會將所有變數的宣告和函式提升到作用域的最前面。而函式的提升在所有變數宣告的後面。注意:js只將變數的宣告提升,它的值不會提升,還在原來的位置。
因此,上面圖片中的程式碼經js解析後:

function test() {
        var a;
        function a() {
        }
        a = 1;
        console.log(a);     //輸出1
    }
test();

注意事項
1、js只提升變數的宣告,不提升變數的值

   test();
   test2();
   function test() {
        console.log("test");
   }
   var test2 = function () {
        console.log("test2")
   }

結果:
在這裡插入圖片描述
原因:
經js解析後:

   var test2;
   function test() {
       console.log("test");
   }
   test
(); test2(); test2 = function () { console.log("test2") }

js只提升變數的宣告,不提升變數的值,因此在執行test2()時,只聲明瞭變數,還未給它賦值,因此test2此時還不是一個方法。

2、變數的提升是根據變數的作用域而提升的,因此區域性變數是在函式內提升。

   test();
   function test() {
       console.log(a);      //輸出undefined
       var a =1;
   }
    console.log(a);
//報錯

3、隱式全域性變數不會被提升

 	console.log(a);
    a = "a";

結果:會報錯
在這裡插入圖片描述