sayid760/Notes

暂时性死区

Opened this issue · 0 comments

###暂时性死区
总所周知 let、const 没有声明提升,因此不能在声明前使用,是因为 TDZ(temporal dead zone)“暂时性死区”。

那什么是暂时性死区呢?

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响

var tmp = 123;

if (true) {
	// 死区开始
	tmp = 'abc'; // ReferenceError
	// 开始声明变量,死区结束
	let tmp;
}

let、const语句不出现变量提升,主要是为了减少运行时错误、减少变量污染

定义到哪儿去了

let 和 const 到底定义到哪儿去了?
查找的资料:

let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。也就是说,从ES6开始,全局变量将逐步与全局对象的属性脱钩。

let是局部的不是全局的,只存在块级作用域中

let tmp={name:'111'}
debugger   // 在script作用域下
console.dir(tmp)

输出确实在script上,但是有待考证...