ES6 let命令特性

一、块级作用域

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

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

二、不存在变量提升

  var命令会发生变量提升的现象,即变量可以在生命前使用,且值为undefined(因为变量提升会让变量的声明提前到当前作用域最上面)。而let命令就改变了这一语法:

//var 情况
console.log(foo); //undefined
var foo = 2;

//let 情况
console.log(bar);//报错
let bar = 2;

三、暂时性死区

  在块级作用域内使用let命令,不会受到外部影响:

var tmp = 123;
if(true){
  tmp = 'abc';//报错
  let tmp;
}

  上述代码中,存在全局变量tmp,但在块级作用域内let又声明了一个局部变量tmp,导致后者绑定在这个块级作用域,因此在let声明之前,对tmp的操作都会报错。总结:暂时性死区的本质就是,只要进入当前作用域,所要使用的变量就已经存在,但不可获取,只要声明之后,才可获取和使用该变量。

四、不允许重复声明

  let不允许在相同作用域内重复声明同一个变量:

//报错
function(){
  let a = 10;
  var = 10;
}

//报错
function(){
  let a = 10;
  let a = 5;
}

//不报错
function(){
  let a = 10;
  {
    let a = 5;
  }
}

你可能感兴趣的:(ES6 let命令特性)