今天被一个简单的问题困惑住了:全局作用域中,var声明的变量是直接挂在window上的,但为什么let声明的变量不会挂到window上。
原因是es6之前,作用域只有函数作用域和全局作用域,浏览器对象中,window又是全局对象,代表了全局作用域,所以var声明的变量要么是在函数作用域中,要么是在全局作用域即window中。 但是es6及以后,js引入了块级作用域,搭配let和const使用,使用这两个关键字声明的变量只在当前的块中可以访问到,在全局声明的变量是在全局的块作用域中生效,不会直接挂window上。
var a = 'test'
window.a // test
let b = 'test'
b // 'test'
window.b // undefined