循环打印数字题

171 阅读1分钟

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 )
}

输出的结果:

image.png

在这我们就得到了第一个想要的方式了。

第二种改造法:

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)
}

输出的结果:

image.png 从我们的代码和浏览器输出的结果来看,我们是一样可以得到我们想要的答案的呢。

4.最后的结语

在这里,作者只是列举了几种改造的例子🌰,当然我们其实还有更多的方式和方法,但是作者在这里列举的几个例子,只是想通过列子和数据的改变,然后让大家能够对变量和作用域有个认识和思考,从而能够更好的实践。

备注:转载请备注出处,最后的解释权归作者所有。