let对于for,if,switch,{},function语句都会有块级作用域,每个作用域里都保存了一个i值;而var声明的变量在function里才有块级作用域,当循环结束时,定时器内部还未执行,此时i为5,所以全是5。