1. let 命令
let 用来声明变量,与 var 类似,那它们有什么区别呢?
(1) let 声明的变量只在块级作用域内有效
关于块级作用域:一对花括号即 { 语句集 } 为一个块
看个例子:
{ var a = 20; let b = 10;}console.log(a); // 20 console.log(b); // 报错 -- b未定义,说明变量b只在花括号内有效!
浏览器效果:
(2) 同一作用域下 let 不可重复声明
先看下 var:
var a = 10;var a = 20;console.log(a); // 20
像上述这样的写法是可以打印出 a 的值的(只是后声明的会覆盖掉前边声明的值)
但是看下 let :
{ let a = 10; let a = 20; console.log(a); // 报错 -- a已经被声明了}
浏览器效果:
(3) let 没有变量提升
关于变量提升:JavaScript 中,变量及函数的声明会被提升到函数的最顶部,这说明变量可以先使用再声明,并不会报错,举个例子看下:
console.log(a); // undefinedvar a = 10;
console.log(a); // 10
浏览器效果:
这个过程可以理解为如下这样:
var a; console.log(a); // undefineda = 10;console.log(a); // 10
可以看到,是一样的结果,允许我们在未声明的时候使用一个变量,但是 let 并不是这样,看下例子:
{ console.log(a); let a = 10; // 报错 -- 初始化前无法访问“a”}
浏览器效果:
直接报错,其实这样更加合理对吧,先声明再使用。
2. const命令
const 用来声明常量(可理解为一直不变的量),使用 const 需要注意:
(1) const 声明的常量只在块级作用域内有效,这点与 let 相同
(2) 同一作用域下 const 不可重复声明,这点也与 let 相同
(3) const 同样不会变量提升,这点仍与 let 相同
(4) 使用 const 定义常量必须初始化即赋值
看个例子:
const a;a = 10;console.log(a); // 报错 -- 常量声明中缺少初始值设定项
浏览器效果:
所以只能这样写:
const a = 10; // 声明时就赋值console.log(a);
(5) const 不可重新赋值,因为是“一直不变的量”
看下例子:
const a = 10;a = 20;console.log(a); // 报错 -- 赋值给常量
浏览器效果:
OK,let 和 const 结束!