ES5 中, 顶层对象的属性等价于全局变量. 用 var,function 声明的变量在顶层对象中.
顶层对象: 浏览器环境中顶层对象是 Windows,Node 中是 global 对象.
ES6:var,function 声明的全局变量, 依然是顶层对象的属性; 而 let,const 声明的全局变量不属于顶层对象的属性, 也就是说 ES6 开始, 全局变量和顶层对象的属性开始脱钩.
- let color='red';
- console.log(Windows.color);//undefined
- var o={
- color:'blue'
- };
- function sayColor(){
- alert(this.color);
- }
- sayColor();//undefined
- o.sayColor=sayColor;
- o.sayColor();//'blue'
用 let 和 const 声明的变量在一个块级作用域 Script 中, 通过设置断点调试即可看到. 访问该变量时, 不通过 Windows 或 global 对象访问, 直接访问即可.
来源: http://www.jianshu.com/p/06020bdc6cd2