1. 程式人生 > >JS中var和let

JS中var和let

聲明 weight ron 內部 es6 png ava 帶來 isp

  前 言

JavaScript

 大家都知道聲明一個變量時,通常會用‘var‘來聲明,但是在ES6中,定義了另一個關鍵字‘let‘。今天我就為大家帶來‘var‘與‘let‘這兩個關鍵字聲明有何異同。

1.1
未賦值聲明

    <script type="text/javascript">
        //試驗代碼
        var a;
        let b;
        
        console.log("這是var聲明:"+a);
        console.log("這是let聲明:"+a);
    </
script>

結果:

技術分享

  從上面的代碼就可以看出,在聲明變量時,不賦值情況下let和var是一樣的,都顯示為:undefined。

1.2重復聲明一個變量

    <script type="text/javascript">
        //試驗代碼
        var a = 1;
        var a = 2;
        
        console.log("這是var聲明:"+a);
    </script>

運行結果:

     技術分享

    <script type="text/javascript">
        //試驗代碼
        let a = 1;
        let a = 2;
        
        console.log("這是var聲明:"+a);
    </script>
    <script type="text/javascript">
        //試驗代碼
        var a = 1;
        let a = 2;
        
        console.log("這是var聲明:
"+a); </script>

運行結果:

     技術分享

  從上面的代碼看出,當定義一個變量後,var和let都可以再次為定義的變量賦值。但是,使用var聲明的變量,可以重復聲明這個變量n次,而使用let聲明的變量只能聲明一次,而且,就算是var或其他的關鍵字聲明後的變量,再使用let聲明時,也會出錯。

1.3函數作用域

    <script type="text/javascript">
        //試驗代碼
        var a = 1;
        let b = 2;
        c = 3;
        !function(){
            var a = 4;
            let b = 5;
            c = 6;
            console.log("這是自執行函數var聲明a:"+a);
            console.log("這是自執行函數let聲明b:"+b);
        }();
        
        console.log("這是var聲明a:"+a);
        console.log("這是let聲明b:"+b);
        console.log("這是全局變量c:"+c );
    </script>

運行結果:

    技術分享

  從上面的代碼和結果可以看出,var和let在函數作用域中的表現是一樣的。函數中定義的變量只能在函數中調用,除非全局變量。

1.5塊作用域

    <script type="text/javascript">
        //試驗代碼
        for(var i=0;i<5;i++){
            console.log(i);
        }
        console.log(i);
    </script>

運行結果:

    技術分享

    <script type="text/javascript">
        //試驗代碼
        for(let i=0;i<5;i++){
            console.log(i);
        }
        console.log(i);
    </script>

運行結果:

    技術分享

    <script type="text/javascript">
        //試驗代碼
        let c = 3;
        console.log(函數外let定義c: + c);
        !function(){
            let c = 6;
            console.log(函數內let定義c: + c);
        }();
        console.log(函數調用後let定義c不受函數內部定義影響: + c);
    </script>

運行結果:

    技術分享

  從上面的代碼看出,在for循環中使用var聲明的變量,在循環結束後可以放在循環外輸出,而使用let聲明的,在循環外是不能調用,提示錯誤。上面提到過let聲明的變量,不可以重復聲明,但是在let的塊作用域下,let可以再次聲明這個變量,但在函數聲明的變量,只能在函數中使用,也就是說用let聲明的兩個變量,是兩個不同的變量。這也是let與var最大的區別。

JS中var和let