一、存在變量提高javascript
console.log(a); // undefined var a = 10;
// 編譯過程
var a;
console.log(a); // undefined
a = 10;前端
二、一個變量可屢次聲明,後面的聲明會覆蓋前面的聲明java
var a = 10; var a = 20; console.log(a); // 20
三、在函數中使用var聲明變量的時候,該變量是局部的函數
var a = 10; function change(){ var a = 20; } change(); console.log(a); // 10
而若是在函數內不使用var,該變量是全局的ui
var a = 10; function change(){ a = 20 }; change(); console.log(a); // 20
一、不存在變量提高,let聲明變量前,該變量不能使用(暫時性死區)。.net
console.log(a); // ReferenceError: a is not defined let a = 10;
二、let命令所在的代碼塊內有效,在塊級做用域內有效code
{ let a = 10; } console.log(a); // ReferenceError: a is not defined
三、let不容許在相同做用域中重複聲明,注意是相同做用域,不一樣做用域有重複聲明不會報錯對象
let a = 10; let a = 20; // Uncaught SyntaxError: Identifier 'a' has already been declared let a = 10; { let a = 20; } // ok
一、const聲明一個只讀的變量,聲明後,值就不能改變blog
const a = 10; a = 20; // TypeError: Assignment to constant variable.
二、const必須初始化ip
const a; // SyntaxError: Missing initializer in const declaration const a = 10; // ok
三、const並非變量的值不能改動,而是變量指向的內存地址所保存的數據不得改動
const obj = { age: 17 } obj.age = 18; // ok obj = { age: 18 } // SyntaxError: Identifier 'obj' has already been declared
四、let該有的特色const都有
var聲明的變量存在變量提高,即變量能夠在聲明以前調用,值爲undefined
let和const不存在變量提高,即它們所聲明的變量必定要在聲明後使用,不然報錯
var不存在塊級做用域
let和const存在塊級做用域
var容許重複聲明變量
let和const在同一做用域不容許重複聲明變量
var和let能夠
const聲明一個只讀的常量。一旦聲明,常量的值就不能改變,但對於對象和數據這種引用類型,內存地址不能修改,能夠修改裏面的值。
能用const的狀況下儘可能使用const,大多數狀況使用let,避免使用var。
const > let > var
const聲明的好處,一讓閱讀代碼的人知道該變量不可修改,二是防止在修改代碼的過程當中無心中修改了該變量致使報錯,減小bug的產生。let聲明沒有產生預編譯和變量提高的問題,先聲明再使用可讓代碼自己更加規範,let是個塊級做用域,也不會污染到全局的變量聲明。
最後說一點就是使用的場景說明:let通常應用於基本數據類型;const 通常應用於引用數據類型,也就是函數對象等。
————————————————
版權聲明:本文爲CSDN博主「前端Vincent」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/xiewenh...