function foo () {
console.log(this.age);
}
const age = 18
foo.apply(window) // undefined
为何 用 const/let
定义一个全局变量 age, 并赋值为 18, 用 foo.apply(window)
或 foo.call(window)
或 window.foo()
输出值都是 undefined
, 而不是 18
呢? 而用 var age = 18
, 结果却为 18
?
为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
ES6入门