使用 let 全局声明变量,能通过 window 对象取到吗?

2024-08-03 18:20:07 137
在 JavaScript 中,`let` 声明的全局变量不会被添加到 `window` 对象上。这与 `var` 声明的变量不同,`var` 声明的全局变量会成为 `window` 对象的属性。

示例对比

使用 var 声明全局变量

var globalVar = 'I am a global variable';

console.log(window.globalVar); // 输出: I am a global variable

在这个例子中,globalVar 被添加到了 window 对象上,可以通过 window.globalVar 访问。

使用 let 声明全局变量

let globalLet = 'I am a global variable with let';

console.log(window.globalLet); // 输出: undefined

在这个例子中,globalLet 没有被添加到 window 对象上,因此 window.globalLet 输出 undefined

解释

  • var 声明的全局变量:当在全局作用域中使用 var 声明变量时,变量会被添加到 window 对象的属性上。这是因为 var 的作用域是函数作用域或全局作用域,且在全局作用域中,它的声明会影响到全局对象(window)。

  • letconst 声明的全局变量:当使用 letconst 声明变量时,这些变量不会成为 window 对象的属性。letconst 的作用域是块级作用域,它们在全局作用域中的行为不同于 var。全局变量 letconst 声明的变量不会挂载到全局对象上,避免了全局作用域的污染。

总结

  • 使用 var 声明的全局变量会成为 window 对象的属性。
  • 使用 letconst 声明的全局变量不会成为 window 对象的属性。

使用 letconst 的好处在于它们提供了更精确的作用域控制,减少了潜在的全局变量污染,从而提高了代码的可维护性和安全性。