JS中 var,let與const的區別
阿新 • • 發佈:2021-06-27
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