1. ES6
-
var:在ES6出來之前,聲明變量都只能使用var關(guān)鍵字 -
let和const都是ES6出來的新語法
2. 變量提升
- var會進(jìn)行變量提升
而console.log(a) //undefined var a = 1let和const這么打印的時候,會報錯。 -
let和const不能變量提升
報錯: b is not definedconsole.log(b) //報錯: b is not defined let b = 2
報錯: c is not definedconsole.log(c) //報錯: c is not defined let c = 3
3. 作用域
-
var是全局變量。
這段代碼打印出來的事function fn(){ if(true){ console.log(a) }else{ var a = 1 console.log(2) } } fn() // undefinedundefined,變量a會提升到if的上面去 -
const和let都是塊級局部變量。
打印出來是{ let a } console.log(a) //undefinedundefined。
打印出來也是{ const a =1 } console.log(a) //undefinedundefined。
4. 申明賦值
-
var和let都不需要在申明的同時賦值var a console.log(a) //undefined
打印出來的都是let b console.log(b) //undefinedundefined -
const必須在聲明的同時賦值,不然就會報錯
編譯器就會報錯:const a
控制臺報錯:
SyntaxError: Missing initializer in const declaration
5. 賦值更改
-
var和let都可以在作用域內(nèi)改變聲明的變量的值
打印出來的是2。var a = 1 a = 2 console.log(a) //2
打印出來的是2。let b = 1 b = 2 console.log(b) //2 -
const聲明的變量在作用域內(nèi),基本數(shù)據(jù)類型賦值不能更改。如果是復(fù)雜類型,就可以修改。
編譯器報錯:const c = 1 c = 2
控制臺報錯:Attempt to assign to const or only variableTypeError: Assignment to constant variable.
6. 同名變量
-
var可以聲明同名變量
聲明并賦值成功,打印出來的是2。var a = 1 var a = 2 console.log(a) //2 -
let和const在作用域內(nèi)不能聲明同名變量
報錯:const a = 1 const a = 2SyntaxError: Identifier 'a' has already been declared
