02 let 和 const 命令

217 阅读2分钟

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 结束!