探秘 const 和 let 声明的变量为何不显于 window
2023-11-06 14:10:13
在 JavaScript 的世界中,const 和 let 是用来声明变量的两个,它们与传统的 var 关键字有着截然不同的行为。本文将深入剖析 const 和 let 声明的变量为何不显于 window 对象上,揭开其中的奥秘。
ES5 中的全局变量
在 ES5 中,顶层对象的属性和全局变量是等价的。也就是说,var 命令和 function 命令声明的全局变量,自然也是顶层对象。例如:
var name = "John Doe";
console.log(window.name); // 输出 "John Doe"
在此示例中,var 命令声明的全局变量 name 也可以通过 window.name 访问。
ES6 中的块级作用域
ES6 引入了一个重大的变化:块级作用域。块级作用域允许我们在代码块(如 if 语句、for 循环或函数体)内声明变量,这些变量只在该代码块内可见。换句话说,块级作用域限制了变量的可见性范围。
const 和 let 声明的变量就是块级作用域变量。这意味着它们只能在声明它们的代码块内访问。例如:
if (true) {
const age = 30;
console.log(age); // 输出 30
}
console.log(age); // ReferenceError: age is not defined
在上面的示例中,const 声明的变量 age 只能在 if 块内访问。在块之外,age 是未定义的。
const 和 let 变量不在 window 上
与 var 声明的变量不同,const 和 let 声明的变量不属于顶层对象。它们只存在于声明它们的代码块中,因此无法通过 window 对象访问。例如:
const name = "Jane Doe";
console.log(window.name); // 输出 undefined
在这个示例中,const 声明的变量 name 无法通过 window.name 访问。这是因为 name 是一个块级作用域变量,不属于顶层对象。
总结
ES6 中引入了块级作用域,这改变了 JavaScript 中变量声明的行为。const 和 let 声明的变量是块级作用域变量,这意味着它们只在声明它们的代码块内可见。与 var 声明的变量不同,const 和 let 声明的变量不属于顶层对象,因此无法通过 window 对象访问。理解这些细微差别对于编写健壮、可维护的 JavaScript 代码至关重要。