暂时性死区

172 阅读2分钟

Let 中提到的暂时性死区到底是什么,它的产生原因是?

  ES6 规定,如果区块中存在 letconst 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”,也就是说使用let声明的变量都是先声明再使用 ,不存在变量提升问题。

———————————————— 版权声明:本文为CSDN博主「小白大雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/qq_61956177… 在块级作用域内存在let命令,它声明的变量,就绑定在当前作用域起,不收外界的影响。总之,在该块级作用域内,let命令声明之前,该变量不可用,在语法上称为暂时性死区

var a = 2 function fn(){ console.log(a) } fn()

以下代码存在暂时性死区:

var a = 2 function fn(){ console.log(a) let a = 1 } fn()

·var的创建和初始化被提升,赋值不会被提升。

·let的创建被提升,初始化和赋值不会被提升。let 和 const 作用基本一致,但是const 声明的变量不能再次赋值

·function的创建、初始化和赋值均会被提升。

为什么let,const有暂时性死区,而var没有?

因为var有预处理机制,也就是变量提升; 声明提前指的是,不管变量被声明在函数什么位置,这些声名都会被提升至函数顶部。 比如 var a = 1; 会把var a; 提升到函数顶部。 赋值在原位置不动。