let变量声明总结

let命令有四大主要特性:存在块级做用域没有变量提高暂时性死区不容许重复声明函数

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

 

一、存在块级做用域spa

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

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

es5中要实现块级做用域,一般借助当即执行匿名函数来实现:blog

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

可是有了let以后,就像C语言同样,直接就是:作用域

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

 

二、没有变量提高io

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

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

对比var经典的变量提高function

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

 

三、暂时性死区class

在块级做用域内,若存在用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; }

 

四、不容许重复调用

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

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

var b = 1; let b = 1; //出错 let不可重复声明
 const c = 1; let c = 1; //出错 let不可重复声明
相关文章
相关标签/搜索