1.声明的变量不同作用域都不同;
2.var 声明的变量将会被提前到函数的最前,赋值留在原地;而let申明的变量则不会;
3.var申明的变量可以重复声明被覆盖,而let在同一个作用域中只能申明一次,否则会报错,提示不能重复声明。
.
在js预解析以前会做语法分析,预解析的时候会解析变量声明是否合理,而一个基础模块中let相同变量只能声明一次,所以解析的时候就会因为变量声明报错,不再继续执行程序
4.在构造函数中使用let声明变量可以避免使用闭包
5.使用与传递给函数的变量名相同的变量名,将导致在一个循环中的错误。