注意:for循环定义i的时候把var换成了let,打印出的结果就是0,1,2,3,4
如果用var声明 就是打印5次5
因为let关键字劫持了for循环的块作用域,产生了类似闭包的效果。并且在for循环中使用let来定义循环变量还会有一个特殊效果:每一次循环都会重新声明变量i,随后的每个循环都会使用上一个循环结束时的值来初始化这个变量i
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}