乐字节吧 关注:46贴子:741
  • 0回复贴,共1

var和let/const的区别及补充(ES6的代码块级作用域)(第四点)

只看楼主收藏回复

4、暂时性死区
var foo = 'foo'
function bar() {
console.log(foo)//报错,也不会访问作用域外层
let foo = "abc"//let/const 也存在变量声明提升,只是没有初始化分配内存。 一个变量有三个操作:
//声明(提到作用域顶部),初始化(赋默认值),赋值(继续赋值)
}
bar()
当程序的控制流程在新的作用域(module function 或 block作用域)进行实例化时,在此作用域中用 let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。
因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。
造成该错误的主要原因是:ES6新增的let、const关键字声明的变量会产生块级作用域,如果变量在当前作用域中被创建之前被创建出来,由于此时还未完成语法绑定,如果我们访问或使用该变量,就会产生暂时性死区的问题,由此我们可以得知,从变量的创建到语法绑定之间这一段空间,我们就可以理解为‘暂时性死区’


1楼2022-04-09 00:17回复