ES6 let const 与var的区别

129 阅读1分钟

一、 let const声明的变量不会挂载到全局window对象上,var声明的变量会挂载到window对象上。 这里我举两个例子说明一下:

var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined
const a = 10;
console.log('a' in window, window.a);//  false undefined

var a = 10;
console.log('a' in window, window.a);//   true 10

那么也有一个疑问, 全局声明变量的时候 let const 存储到哪里了呢?

image.png

可以看到声明的变量在作用域里面

二、let const 会有暂时性死区 出现暂时性死区会报错如下图:

image.png 出现 ReferenceError 即出现了暂时性死区

另一个例子:

let foo = 19;
function do_something() {
  console.log(bar); // undefined
  console.log(foo); // ReferenceError
  var bar = 1;
  let foo = 2;
}
do_something();

即使外层作用域里有foo,仍然有暂时性死区。