ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 题目 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取? 在ES5中,顶层对象的属性和全局变量是等价的,var 命令和 function 命令声明的全局变量,自然也是顶层对象。 ~~~js var a = 12; function f(){}; console.log(window.a); // 12 console.log(window.f); // f(){} ~~~ 但ES6规定,var 命令和 function 命令声明的全局变量,依旧是顶层对象的属性,但 let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。 ~~~js let aa = 1; const bb = 2; console.log(window.aa); // undefined console.log(window.bb); // undefined ~~~ 在哪里?怎么获取?通过在设置断点,看看浏览器是怎么处理的: ![](https://img.kancloud.cn/7f/a2/7fa20f469f0065511b996fbf64b5f60d_1105x379.png) 通过上图也可以看到,在全局作用域中,用 let 和 const 声明的全局变量并没有在全局对象中,只是一个块级作用域(Script)中 怎么获取?在定义变量的块级作用域中就能获取啊,既然不属于顶层对象,那就不加 window(global)呗。 ~~~js let aa = 1; const bb = 2; console.log(aa); // 1 console.log(bb); // 2 ~~~ 摘自 [全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?](https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/30)