let和var的一点区别

51 阅读1分钟

今天被一个简单的问题困惑住了:全局作用域中,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