es6之let const

111 阅读1分钟

let

  1. 用来声明变量,let 声明的变量只在let命令所在的代码块内生效
{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

关于循环

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

变量i是用let声明的,只在本轮循环内有效,所以每一次循环, i都是一个新的变量,js引擎会记住上一次循环的结果,并初始化本轮的变量i, 然后在上一轮循环结果的基础上进行计算。

for循环的特别之处,设置循环变量的那部分是个父作用域,循环体内部是一个子作用域

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc
  1. 不存在变量提升
  2. 暂时性死区

const

  1. 声明只读的常量
  2. const实际保证的是 变量指向的那个内存地址所保存的数据不能改动,对于简单类型(数字,字符串,布尔值),值就保存在变量指向的那个内存地址中,因此等同于常量,但是对于复合类型的数据,变量指向的内存地址里面保存的是一个指向实际数据的指针,const只能保证这个指针是固定的。

es6 声明变量的方式

  1. es5: var, function
  2. es6新增: let, const, import, class