let变量声明总结

let命令有四大主要特性:存在块级作用域没有变量提升暂时性死区不允许重复声明

这都是和es5的var变量特性相反的。

 

1、存在块级作用域

let命令声明的变量只在其块级作用域中有效,就是{}中。

{
  let a = 10;
  var b = 1;
}
console.log(a); //出错 not defined
console.log(b); //1

es5中要实现块级作用域,通常借助立即执行匿名函数来实现:

(function(){
  var a = 1;
}());
console.log(a); //出错,not defined

但是有了let之后,就像C语言一样,直接就是:

{
  let a = 1;
}
console.log(a); //出错, not defined

 

2、没有变量提升

也正因如此,变量必须在声明后使用,否则会报错。

console.log(a); //出错, not defined
let a = 1; 

对比var经典的变量提升

console.log(a); //undefined
var a =1;

 

3、暂时性死区

在块级作用域内,若存在用let命令声明的变量,则所在区块对该变量形成封闭作用域,也就是该变量无视外部的同名变量。而又因为不存在变量提升,所以在该区块中,不能在声明前使用该变量。

var a  = 1;
if(true){
  a = 2; //出错 not defined
  let a; 
}

对比var

var a = 1;
if(true){
  a = 2; //var允许重复声明,而且变量提升,故a=2正常赋值
var a;
}

 

4、不允许重复调用

let不可以在相同作用域内重复声明同一个变量,也包括不能和var,const变量名重复

let a = 1;
let a = 1; //出错 let不可重复声明

var b = 1;
let b = 1; //出错 let不可重复声明

const c = 1;
let c = 1; //出错 let不可重复声明

 

posted @ 2016-07-27 00:08  振小文  阅读(6287)  评论(0编辑  收藏  举报