let声明的变量不在window在哪里呢?
var a=0;
let b=1;
console.log(a);
console.log(b);
console.log(window.a);
console.log(window.b);
打开chrome console
var a=0;
let b=1;
debugger;

- 可见let的变量是存在于Script Scope

- 可见Global Scope是Window构造函数创建出来的
- Global Scope前半段已经有我们var的a

- 这是Global Scope的后半段,有我们熟悉的window对象
- 其中还有一个我们var的a
- 依次推断,这才是我们平时window.a的真实所在
或者直接打印函数也可以看出
demo1
var a=0;
var b=0;
function add(){
var c=0;
}
console.dir(add);

- add函数的[[Scopes]]只有一个内容就是Global,a与b两个变量挂在add函数的Global作用域上因为他们是随时可用的
- 由于只是窥探add,所以是看不出c挂在哪个作用域的
demo2
var a=0;
var b=0;
function add(){
var c=0;
function add1(){ c=0;}
console.dir(add1);
}
add();

- add1函数的[[Scopes]]有两个内容 Closure与Global
- 因为add1内部引用着外部变量c
demo3
let a=0;
const b=0;
var c=0;
function add(){
}
console.dir(add);
