JavaScript 函数的执行时机
先导
for循环 for循环+定时器有奇效 改正var的缺陷方法
今天元旦节,祝大家新年快乐!
for循环
其实在前文我们有对for循环介绍过,在此将前文的内容拷贝到该篇文章中供读者方便阅读
语法:for(语句1;表达式2;语句3){循环体}
代码如下:
for(var i =0;i<5;i++){
console.log('i小于5啊')
}
以上代码会打印出5句i小于5啊,因为当初次进入判断的时候i为0,所以会进入循环,但是当i为4时是最后一次进入判断时已经循环了4次,将做最后一次循环后,i将为5,不满足判断条件,则退出了循环
for的执行步骤:
先执行语句1 然后判断表达式2 如果为真,执行循环体,然后执行语句3 如果为假,直接退出,执行后面的语句
for循环+定时器有奇效
当循环和定时器合在一起的时候,最后的输出会变成什么呢,请看下面代码.
for(var i =0;i<5;i++){
console.log('i小于5啊')
setTimeout(() => {
console.log(i)
})
}
根据第一小节讲到的for循环原理,大家很容易知道,'i小于5啊'该语句会打印出5次,同样i的值也会打印5次,但是大家认为i的值为多少呢?由于当定时器执行的时候for循环的语句已经执行完毕了,所以最后i的值将为5.所以最后必然会打印出5个5,因为在var中并没有块级作用域的概念,所以每个循环的阶段的值并不会保存,最后存下来的值为最后一次i++后的值为5.那么如何解决这个问题呢,请看下一节
改正var的缺陷方法
可以使用let方法,let为es6的新语法,有自己的块级作用域概念,代码如下.
for(let i =0;i<5;i++){
console.log('i小于5啊')
setTimeout(() => {
console.log(i)
})
}
该代码最后输出i的值将为0,1,2,3,4
该方法完美的解决的var定义i后全部输出值为5的方案
还可以使用以下的代码,将每一次循环后的值保存到一个新的变量当中,然后在定时器中输出这个新定义的变量.
for(let i =0;i<5;i++){
console.log('i小于5啊');
let j = i;
setTimeout(() => {
console.log(i)
})
}
总结
该篇文章为大家介绍了for循环和定时器共同使用时需要注意到的问题,同时为大家给出了解决的方案供大家参考,可能还会有其他的方式,等待大家去发掘.
记得持续学习,不断跟进!加油!
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!