1. 程式人生 > 其它 >JS中 var,let與const的區別

JS中 var,let與const的區別

1.在ES6(ES2015)出現之前,JavaScript中宣告變數就只有通過var關鍵字,函式宣告是通過function關鍵字,而在ES6之後,宣告的方式有var、let、const、function、class,該文主要討論var、let和const之間的區別。

2.首先讓我們來體驗一下let主要是幹嘛的

  2.1 let主是用來宣告變數的,但是let宣告的關鍵是具有塊級作用域的,而var宣告的變數是不具備這個特點的。那麼何為塊級作用域呢?塊作用域由 { } 包括,if語句和for語句裡面的{ }也屬於塊作用域。

  那還是看程式碼體驗把:

<script> if(true){ vara=50; letb=10; console.log(b); console.log(a); } console.log(a); console.log(b);//該列印是會報錯的,就是因為let有塊級作用域 </script>

結果如下:

2.2 使用let宣告變數,防止迴圈變數變成全域性變數,而var也不具備這個特點

程式碼:

 <script>
        for (var i = 0; i < 3; i++) {

        }
        console.log(i);
        for (let j = 0; j < 3; j++) {

        }
        console.log(j);//會報錯
    </script>

結果如下:

2.3使用let關鍵字不存在變數提升(即不能先使用後宣告),也會存在暫時性死區(即在一個塊級作用域起作用,不會收到外部有同樣名字的變數影響)

請看程式碼:

 <script>
        // console.log(a);//會報錯
        // let a = 100;
        var num = 10;
        if (true) {
            console.log(num);//會報錯
            let num = 10;
        }
    </script>

結果:

3.const:是用來宣告常量的(即記憶體地址不能變化的量)

3.1  const 也是具有塊級作用域的

程式碼體驗:

 <script>
        if (true
) { const num = 10; if (true) { const a = 20; console.log(a); } console.log(num); } console.log(num); //會報錯 </script>

結果如下:

3.2 const宣告的常量值是不能更改的(分為2種情況,即基本資料型別與複雜資料型別)

看程式碼體驗:

 <script>
        // const pi = 3.14;
        // pi = 5
        // console.log(pi);
        const arry = [100, 200];
        arry[0] = 50;
        arry[1] = 80
        console.log(arry); //沒有改變該陣列的記憶體地址,可以列印
        arry = [1, 2] //已經更改了記憶體地址,會報錯
        console.log(arry);
    </script>

結果如下:

注意點:const關鍵字宣告的常量必須得有初始值,否則也會有報錯

總結:最後用一個表來總結一下它們三者的區別與聯絡,請看下圖:

最後的話,如果您在閱讀過程中發現有錯誤的話,還請各位大佬多多指正!

參考連結:https://www.bilibili.com/video/BV1gV411q7cz?p=99&share_source=copy_web