ECMAScript 6 新特性之-块级作用域 let

Lasted 2020-01-10 13:33:29

let 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。

let 声明的变量只在其声明的块或子块中可用,这一点,与 var 相似。二者之间最主要的区别在于 var 声明的变量的作用域是整个封闭函数。

//ECMAScript 6 | ES6

function varTest() {
  var x = 1;
  {
    var x = 2;  // 同样的变量!
    console.log(x);  // 2
  }
  console.log(x);  // 2
}

function letTest() {
  let x = 1;
  {
    let x = 2;  // 不同的变量
    console.log(x);  // 2
  }
  console.log(x);  // 1
}

var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined

在同一个函数或块作用域中重复声明同一个变量会引起 SyntaxError。

if (x) {
  let foo;
  let foo; // SyntaxError thrown.
}

let x = 1;
switch(x) {
  case 0:
    let foo;
    break;
    
  case 1:
    let foo; // SyntaxError for redeclaration.
    break;
}