Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情
1.前言
今天打算和大家分享一下循环打印的问题点,相信大家在面试或者编写的过程中经常会遇到变量,作用域的问题,那么今天就通过几个例子来阐述一下。
2.循环打印数据
for(var i = 0; i < 5; i++) {
console.log(i) // 0,1,2,3,4
setTimeout(()=> {
console.log(i); // 5,5,5,5,5
});
}
从上面的代码中发现在 setTimeout 中输出的值是5个5,但是如果我们想要输出的是 0,1,2,3,4呢,改如何改造呢?
3.根据想法需求进行改造
第一种改造法:
for( let i = 0 ; i < 5; i++ ){
console.log( '改造1:', i )
}
输出的结果:
在这我们就得到了第一个想要的方式了。
第二种改造法:
for(var i = 0; i < 5; i++) {
let _i =i;
setTimeout(()=> {
console.log('改造2:', _i);
});
}
通过第二种临时变量的改变,我们也可以达到想要的需求。
那么在这里,可能有人有疑问,我还是想想刚开始的,使用 setTimeout 的方式,改造不可以么?答案是可以的,请看:
第三种改造法:
for (var i = 0; i< 5; i++){
setTimeout(i => {
console.log('改造3:', i);
}, 1000, i)
}
输出的结果:
从我们的代码和浏览器输出的结果来看,我们是一样可以得到我们想要的答案的呢。
4.最后的结语
在这里,作者只是列举了几种改造的例子🌰,当然我们其实还有更多的方式和方法,但是作者在这里列举的几个例子,只是想通过列子和数据的改变,然后让大家能够对变量和作用域有个认识和思考,从而能够更好的实践。
备注:转载请备注出处,最后的解释权归作者所有。