es6 let&const

说明

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。

let 声明的变量只在 let 命令所在的代码块内有效。

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

一、 var 声明

  1. 声明提前(变量提升)
  2. 可以重复声明
  3. 可在全局或函数作用域下声明
console.log(value);
var value = 1;
function fun1() {
  var value = 10;
}

二、 let 声明

  1. 不可以声明提前
  2. 不可以重复声明(同一作用域下)
  3. 有块级作用域
  4. for(let i;;){},在 for 的小括号声明,也属于块级作用域中

1. 不可以声明提前

console.log(a); //ReferenceError: a is not defined
let a = "apple";

console.log(b); //undefined
var b = "banana";

2. 不可以重复声明(同一作用域下)

let a = 1;
let a = 2;
var b = 3;
var b = 4;
a; // Identifier 'a' has already been declared
b; // 4

3. 有块级作用域

//代码块 for(){}  while(){}
{
  let i = 3; //在这个代码块中定义
}
// console.log(i);  // 报错 i未定义

4. for(let i;;){},在 for 的小括号声明,也属于块级作用域中

for (var k = 0; k < 5; k++) {
  setTimeout(() => {
    console.log(k);
  }, 100);
}
//输出结果 5,5,5,5,5

for (let k = 0; k < 5; k++) {
  //k在块级作用域中
  setTimeout(() => {
    console.log("let", k);
  }, 100);
}
//输出结果 0,1,2,3,4

for (var j = 0; j < 5; j++) {
  //es5, 使用闭包保存变量,从而隔绝绝对全局变量的访问
  (function(j) {
    setTimeout(() => {
      console.log("es5", j);
    }, 100);
  })(j);
}

三、 const 声明

  1. 不可声明提前
  2. 不可重复定义
  3. 不可重复赋值
  4. 必须声明同时赋值
  5. 和 let 一样有块级作用域

?> 实战: 有变量名避免冲突可以使用let和const, 如果是某些不需要改变只提供方法的对象,可以使用const声明

const MAX = {
  value: 100
};
console.log(MAX);
MAX.value = 200;
{
  const MIN = 0;
  console.log("const", MIN);
}
console.log("const", MIN); //报错,未定义
Last Updated:
Contributors: zerojs