JS中var和let
阿新 • • 發佈:2017-10-02
聲明 weight ron 內部 es6 png ava 帶來 isp 1.1
前 言
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