一般来说,这段代码,绝对不是理想的
for (var i = 0; i < 6; i++) { setTimeout(() => { console.log(i); }, 1000);}
打印成这样
先说两种解决方法:let和setTimeout的第三个参数
另一种是let
for (let i = 0; i < 6; i++) { setTimeout(() => { console.log(i); }, 1000);}
最后一种立即执行函数
for (let i = 0; i < 9; i++) { (function (i) { setTimeout(() => { console.log(i); }, 2000); })(i)}
虽然这种方法可以解决,但是会产生闭包!因为settimeout里的函数用到了当前非作用域的i
如何验证?
不敢意思图片打错字了,是用完就丢,这样就不会驻扎在内存里了
所以刚刚那个for循环如果用到立即执行函数,产生闭包记得要设置为null哦
for (let i = 0; i < 9; i++) { (function (i) { setTimeout(() => { console.log(i); i = null;//记得这句 }, 2000); })(i)}
不知有没有说错