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