今天想总结总结下,我遇见的interval这个定时器的一些问题,可能对大家有点帮助(因为真的卡了我挺久)
以上代码实现点击按钮之后返回==”请在 ”time“ 秒之后重新发送短信,time为0时内容重写变为发送验证码“
但是实现的效果为 5 4 3 2 然后直接回到if中判断为0,返回=====发送验证发送验证码。 也就是time为1的时候没有实现,于是我在每一次的innerHTML赋值下面打印了当前的time(以上代码第九行)===结果如下
也就是说1这个情况的函数是执行了,但是没有返回到内容里。
而当我把以上代码的if判断以及内容和赋值内容对调位置时,如下==此时返回结果一切正常,“请在1秒后发送”也会实现出来
以上代码的time不是时间,只是一个数,只会随着运行次数的变化而变化,不会因为定时器的运行时间变化影响
问了很多人,总结出来以下结论:
此处出现的问题其实是interval这个定时器的运行机制,
时间第一秒过去之后===开始第一次进行函数,此时time为5,但是!这个时候第二秒已经过去了,此时整个函数已经再1-2秒这个时间里运行完了,可以理解为当你输出5的时候,定时器已经结束第二秒,开始进行第2-3的第二次函数。
以上说的可能比较抽象,毕竟效果都是5.
现在我们从time为2的时候开始去想,判断为什么1不会出来。当time为2的时候此时这一次函数已经在这一秒完全结束了,也就时time--已经进行,此时的time其实为1,紧接着定时器进行下一次函数。重点来了!time为1传入下一次函数,按照函数进行顺序应该时先输出”请在1秒后发送“,再去time-- ,但是定时器已经在这一秒把这一整个函数运行完了,定时器返回了这一秒结束后函数的返回的状态,也就是说time--已经进行了,此时time为0. if后面的语句运行,覆盖了,所以1这个值返回不出来(喵的。。。这不就是覆盖么。。。。我在想什么啊......)耽误大家时间了.............我是rz........