var,let和const

1、var的特色

一、存在變量提高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

2、let的特色

一、不存在變量提高,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

3、const

一、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都有

4、區別

  • 變量提高

var聲明的變量存在變量提高,即變量能夠在聲明以前調用,值爲undefined
let和const不存在變量提高,即它們所聲明的變量必定要在聲明後使用,不然報錯

  • 塊級做用域

var不存在塊級做用域
let和const存在塊級做用域

  • 重複聲明

var容許重複聲明變量
let和const在同一做用域不容許重複聲明變量

  • 修改聲明的變量

var和let能夠
const聲明一個只讀的常量。一旦聲明,常量的值就不能改變,但對於對象和數據這種引用類型,內存地址不能修改,能夠修改裏面的值。

5、使用

能用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...

相關文章
相關標籤/搜索