最近在写一个需求的时候,出了点小小的问题,在这做个记录。

对于定时函数setInterval()大家应该都不陌生,setInterval(callback(),time)就是说设置一个定时器,每隔time时间,

(当然这个时间是以毫秒计算的,1秒=1000毫秒)执行一次回调callback();

我刚开始这么写的代码:

function forbidden(){
var time = ;
$('.getSms').attr('disabled','disabled');
      if(time>){
var timer = setInterval(function(){
$('.getSms').text(time+'秒后重新发送');
time--;
            };);
      }else{
window.clearInterval(timer);
$('.getSms').text('发送短信');
$('.getSms').attr('disabled',false);
}

当时是这么想的,单击发送短信按钮触发forbidden(),初始化一个变量time=60,并且此时按钮不可用,然后判断:如果

time大于0,执行定时器timer(time--),等到time小于等于0的时候,清除定时器,按钮的显示文字也改变,并且变为可用,

好像一切都是这么地呵护逻辑,但是!!!点击按钮之后,看着上面的数字由60一点一点地减,减到0之后,变成了-1,-2...

瞬间懵逼了,于是就在else语句里面打一个console.log(time),然后再跑一遍,等到数据为-1的时候,控制台没打印time值,

然后意识到,这个定时函数一直在跑,time=-1的时候,并没有进行判断,于是~~~~把time的判断放到callback()里面,像这样:

function forbidden(){
var time = ;
$('.getSms').attr('disabled','disabled');
var timer = setInterval(function(){
$('.getSms').text(time+'秒后重新发送');
time--;
if(time<){
console.log(time);
window.clearInterval(timer);
$('.getSms').text('发送短信');
$('.getSms').attr('disabled',false);
}
}, );
}

然后,问题解决。

事后,觉得可以这么理解,定时函数是一个独立的空间,一旦开启,就一直执行(对后续代码段造成阻塞),然而我们在定时器后

面规定,time<0的时候,清除定时器,这句代码压根一直都没执行,又怎么会生效呢,放在callback()里面就不一样了,每隔1秒执行

一次callback(),每执行一次callback()就会判断了,time是不是小于0啊,不是的话待会还是要执行callback(),如果是的话,待会就

不执行这个callback()了。

最新文章

  1. wind取交易日历n day数据
  2. Nodejs进阶:核心模块https 之 如何优雅的访问12306
  3. 《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS
  4. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件
  5. 【NOIP训练】【数论】超级计算机
  6. MySQL数据库索引的4大类型以及相关的索引创建
  7. 基于KVM的虚拟化研究及应用
  8. 使用split进行分割时遇到特殊字符的问题
  9. A Corrupt Mayor&#39;s Performance Art(线段树区间更新+位运算,颜色段种类)
  10. android handler机制和Timer采用
  11. URL vs. HTML 录制模式
  12. laravel利用subquery使左连接查询右表数据唯一查询
  13. Android NDK and OpenCV Development With Android Studio
  14. java多线程基本概述(三)——同步块
  15. (转) Spring Boot JDBC 连接数据库
  16. 【机器学习】彻底搞懂CNN
  17. 使用HTML5拍照
  18. 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)
  19. 如何用ABP框架快速完成项目(4) - 如何正确使用ABP?
  20. 不同AI学科之间的联系

热门文章

  1. Ubuntu学习笔记3-图书知识点总结
  2. JavaScript:关闭当前页面(微信、电脑)
  3. SpringMVC学习大纲
  4. Zabbix JVM 安装
  5. 20145219 《Java程序设计》第07周学习总结
  6. WIN7下PHP无法开启CURL,终极解决方案
  7. 使用IDEA整合SSM框架
  8. 做Webservice时报错java.util.List是接口, 而 JAXB 无法处理接口。
  9. mysql 一些属性
  10. thinkPHP中怎么使用阿里云的sdk