ES6-Let和Const

294 阅读1分钟

let

1.let用来声明变量,相当于var,但是let声明的变量是具有块级作用域的

{
    let a = 1;
    console.log(a)
    //打印结果是1
}
console.log(a)
//打印报错

上述代码在对象中使用let声明变量a,所以变量a只在当前代码块中生效,在作用域外会报错

衍生问题:变量提升

//在ES5中
console.log(a) //undefined
var a = 1;

//实际执行的过程
var a; //此过程为变量提升
console.log(a) //undefined
var a = 1

所以Let不存在变量提升,在let声明变量以外的作用域使用该变量都是会报错,可以理解为暂时性死区

2.不可以在同一作用域内重复声明变量

3.块级作用域

ES5只有全局和局部作用局两种,这样就会存在内部变量覆盖外部变量的情况,或者在循环的过程中的变量覆盖 所以在ES6中新增了块级作用域,常用于立即执行的匿名函数,ES6 的块级作用域必须有大括号

// IIFE 写法
(function () {
  var tmp = ...;
  ...
}());

// 块级作用域写法
{
  let tmp = ...;
  ...
}

const

1.const声明一个只读的常量

const a = 666;
PI // 666
PI = 3;
// TypeError: Assignment to constant variable.

const声明的是只读常量,所以已经定义无法修改,而且已经定义就必须马上初始化赋值,不可以等到以后再赋值,并且const和let相同,都具有块级作用域,而且也不存在变量提升,所以也存在暂时性死区

部分文案摘自 es6.ruanyifeng.com/#docs/let