let什么的变量在块级做用域内有效,而var声明则在全局做用内有效函数
let声明的变量不存在变量提高,即必定要在声明以后才能调用,不然就会报错;es5
而var声明的变量则是存在变量提高的,即在声明以前也是能够调用的,不过结果值为undefined。spa
只要块级做用域内存在let命令,它声明的变量就绑定在这个区域内,即便在全局里面有同名的变量,也跟这个不要紧了,在该做用区域内,使用let声明以前,该变量都不可用。内存
let声明的变量,在同一做用域内是不容许被重复声明的;作用域
而var声明的变量则能够在同一做用域内被重复声明。变量
(1).解决了es5中内层变量可能覆盖外层变量的问题循环
(2).避免了循环变量泄漏为全局变量let
(3).避免内外层变量互相影响函数表达式
(4)能够替代当即执行函数表达式undefined