在全局作用域使用 let 声明一个变量后,能否通过 window 对象访问到该变量?
考察说明
考查对 let 声明变量与全局对象(window)之间关系的理解。
回答思路
- 【回答框架 1】使用 let 在全局作用域声明的变量,不会成为 window 对象的属性,因此无法通过 window 对象访问。
- 【回答框架 2】与 var 声明的全局变量不同,var 声明的变量会成为全局对象(浏览器中为 window)的属性。
- 【回答框架 3】let 声明的全局变量仍具有全局作用域,但其存储位置独立于全局对象,避免污染全局对象。
- 【回答框架 4】在全局作用域使用 let 声明时,变量的作用域类似于块级作用域的顶层,但可通过全局词法环境访问。
- 【回答框架 5】访问此类变量时,可直接使用变量名,但不能通过 window 对象属性访问。
- 【关键点 1】let 声明的全局变量不属于 window 对象属性,不能通过 window 访问。
- 【关键点 2】var 声明的全局变量是 window 对象的属性,可通过 window 访问。
- 【关键点 3】let 提供了块级作用域,全局作用域中的 let 变量存储在词法环境中,而非全局对象。
- 【关键点 4】全局 let 变量可以在整个脚本中通过变量名直接访问,但不能挂载到 window 上。
- 【关键点 5】使用 typeof window.变量名 会返回 undefined,而直接使用变量名可正常获取值。
- 【易错点 1】误以为所有全局声明的变量都会成为 window 属性,实际只有 var 和未声明直接赋值才会。
- 【易错点 2】在调试时,如果通过 window 访问 let 全局变量会得到 undefined,容易误判变量未定义。
- 【易错点 3】在严格模式下,未声明变量赋值会报错,但 let 声明不影响其全局特性。