let、var、const 都是用来声明变量的,但是 let 、const 是为了了弥补 var 在作用域上的一些缺陷而引入的,同时在 ES6 中引入块级作用域。
首先来说 let 和 var 的异同。
let
声明的用法与 var
一致,let
声明的变量可以把变量限制在作用域的代码中。
- 声明后未赋值,表现相同
1 2 3 4 5 6
| (function() { var varTest; let letTest; console.log(varTest); //输出 undefined console.log(letTest); //输出 undefined }());
|
- 使用未声明的变量,表现不同
1 2 3 4 5 6 7
| (function() { console.log(varTest); //输出 undefined console.log(letTest); //输出 Error: letTest is not defined
var varTest = 'test var OK.'; let letTest = 'test let OK.'; }());
|
- 不允许重复申明一个变量
1 2 3 4 5 6 7 8 9 10
| (function() { var varTest = 'test var OK.'; let letTest = 'test let OK.';
var varTest = 'varTest changed.'; let letTest = 'letTest changed.'; //直接报错:SyntaxError: Identifier 'letTest' has already been declared
console.log(varTest); //输出varTest changed.(注意要注释掉上面letTest变量的重复声明才能运行) console.log(letTest); }());
|
- 不同作用域申明变量不一样
1 2 3 4 5 6 7 8 9 10 11 12
| (function() { var varTest = 'test var OK.'; let letTest = 'test let OK.';
{ var varTest = 'varTest changed.'; let letTest = 'letTest changed.'; }
console.log(varTest); //输出"varTest changed.",内部"{}"中声明的varTest变量覆盖外部的letTest声明 console.log(letTest); //输出"test let OK.",内部"{}"中声明的letTest和外部的letTest不是同一个变量 }());
|
const
const
声明的是常量,起止一旦设定后不可修改。因此,const
常量声明是必须进行初始化。
const
声明的常量和 let
一样都有作用域的限制。
常量也不可以重复声明变量,无论该变量是 var
或者 let
声明的。