var 遍历,无setTimeout, 正常情况:无延迟输出//0 1 2
var 遍历,setTimeout在for循环外部, 正常情况:延迟1s 后同时输出//0 1 2
var 遍历,setTimeout在for循环内部, 正常情况:延迟1s 后同时输出3个3
let 遍历,setTimeout在for循环内部,正常情况:延迟1s 后同时输出/0 1 2
在使用let时,每次循环时,let定义变量的结果都做了独立模块的解析。
let比var在一个块级作用域中的渗透力要强很多,意思就是作用域在向下传递时,整个会穿透这个块的其他子块
如果要理想中的那种每隔一秒输出一个数字呢?那就要使用立即执行函数
var的写法
for (var i=0; i<5; i++) {
(function (i) {
setTimeout(() => console.log(i), 1000*i)
})(i)
}
let的写法
for (let i=0; i<5; i++) {
(function () {
setTimeout(() => console.log(i), 1000*i)
})()
}