let 命令

62 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

最近发烧了,一时兴起搞一下let和const的区别吧,毕竟这个没啥难度系数,难的咱也搞不懂

基础用法

let 是 es6新增的变量声明的语法,它的用法和var一模一样的,但是它声明的变量,有块级作用域的概念,只有在let所声明的代码块里,这个变量才是有效的变量,下面两组代码,第一个打印块里面定义的x,直接会报错,但是var就没事,var不是块级作用域,

{
let x=1223
}
console.log(x)
ReferenceError: x is not defined.
{
    let x = 1223
    var y = 1212
}
console.log(y)

let 不存在变量提升 var命令会发生“变量提升”现象,变量可以在声明之前使用,值为undefined。下面这段代码不会报错,因为var会自动提升到程序的顶部,

console.log(a)
var a=11

上面的代码执行时会被解释成下面这样

var a;
console.log(a)
a=11

这种骚操作显然是有些奇怪的,按照一般正常人的的逻辑思维,变量应该在声明语句之后才可以使用。还没有赚钱,先花钱,这不是借呗吗?

为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

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

let 的到来,直接解决了一部分编码不规范的人的问题,因为你代码写的不真报错啊,让你运行不了,let声明的变量不回变量提升,所有在声明之前使用let声明的变量的时候直接报错了

暂时性死区 

只要块级作用域 ,使用了let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。就是外面有全局的变量也不好使了,就认里面的这个变量,但是如果这时候在声明前使用这个变量,报错就是暂时性死区的错误了