一、let命令
- 用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
let a = 10;
1. let声明的变量不能重名。
let a = 10; let a = 20; console.log(a);//Identifier 'a' has already been declared标识符“a”已声明
2. let命令在计时器中的用法
for(var i = 0;i<10;i++) { setTimeout(function(){ console.log(i);//10个10 },0) } console.log(i);//10
- 那么怎么输出对应的值呢?
- es5中我们使用的是闭包,而在es6中只需要let命令就可以实现。
for(let i = 0;i<10;i++) { setTimeout(function(){ console.log(i); },0) } //console.log(i);//i is not defined没有定义
- 因为let只在当前代码块内有效,for循环每执行一次就是一个新的代码块,所有输出0-9
- 注:若是在循环体外部输出i,会报错,i is not defined。因为计时器i只在for循环体内有效,在循环体外引用就会报错。
3. let声明的变量不存在变量提升
{ //console.log(a);//Cannot access 'a' before initialization会报错,不能被提前声明 let a = 20; console.log(a);//20 } console.log(a);//a is not defined没有定义
- let声明的变量限制了当前的作用域,只能在当前的代码块内部有效。
4. let命令只在所在的代码块内有效
{ let a=10; } console.log(a);//a is not defined 没有定义
二、const命令
- const声明一个只读的常量。一旦声明,常量的值就不能改变。
const pi = 3.14;
1.常量只能读取,不能修改。
const a = 10; a = 20; console.log(a)//Assignment to constant variable常数变量赋值
- const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
2.const声明的常量不能被提前声明
console.log(a);//Cannot access 'a' before initialization在初始化之前无法访问“a” const a = 10; a = 20;
3. const只在声明所在的块级作用域内有效。
4. const命令声明的常量也不存在变量提升
- 同样存在暂时性死区,只能在声明的位置后面使用。
5. const声明的常量,也与let一样不可重复声明
三、ES6 声明变量的六种方法
- ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,还有另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。