let与const命令

let命令

基本用法

ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

{
  let a = 10;
  var b = 1;
}

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

for循环适合使用let命令,计数器i只在循环体内有效。

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

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

变量声明

let不存在声明提升,它声明的变量绑定所在的块级作用域,凡是在声明之前就使用这些变量,就会报错。而且不可重复声明。

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

块级作用域

function f1() {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}

块级作用域内,外层代码不受内层代码块的影响,而且外层作用域无法读取内层作用域的变量,内层作用域可以定义外层作用域的同名变量。

应该避免在块级作用域内声明函数,如有必要,可以写成函数表达式。

const命令

基本用法

const声明一个只读的常量。一旦声明,常量的值就不能改变。

const PI = 3.1415;
PI // 3.1415

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

const的作用域与let命令相同:只在声明所在的块级作用域内有效。

对于符合类型的变量,变量名不指向数据,而是指向数据所在的地址。

const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变。

const foo = {};
foo.prop = 123;

foo.prop
// 123

Last updated