一个闭包的切入问题
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i + '');
}, 100);
}
不能输出想要的结果,因为循环中的setTimeout接受的参数通过闭包访问变量i,javascript为单线程环境,setTimeout注册的函数需要等待线程空闲才能执行,此时for循环已经结束,i的值为5.
修改方法: 将setTimeout放在函数立即调用表达式中,将i值作为参数传递给包裹函数,创建新闭包
for (var i = 0; i < 5; i++) {
(val => {
setTimeout(function () {
console.log(i + '');
})
})(i)
}