浏览器顶层对象:window
浏览器环境中的顶层对象指的是window
在ES5中声明的全局变量与顶层对象的属性是等价的:举例
window.a = 1;
a // 1
a = 2;
window.a // 2
上面案例代码中,顶层对象的属性赋值与全局变量的赋值,是同一件事。
顶层对象的属性与全局变量挂钩被认为是JavaScript语言设计的最大败笔之一,故从ES6开始,开始逐步纠正这一错误。
在ES6中let、const、与class命令声明的全局变量不再是顶层对象属性:举例
let b = 1;
const c = 2;
window.b // undefined
window.c //undefined
上面代码中以let和const声明的全局变量不再是顶层对象的属性,所以显示undefined;
但是ES6为了兼容以前的旧版本以var和function声明的全局变量依旧是顶层对象的属性。
var a = 1
window.a // 1
let d = 2
window.b //undefined