说到定时器,很多人都不陌生,觉得这个有什么说的,很简单的了,其实你真正的理解了它了吗? 定时器的返回值是什么?clearInterval和 null有什么区别,可能有些干了几年的都不知道,下面我以setInterval为例来依次说下:

1.定时器的返回值
定时器是有返回值得,返回值代表着是第几个定时器,类型是number类型,也可以用来取消定时器,它是定时器的唯一标识符。

 var num = 1;function fn() {var timer = setInterval(function () {console.log(num);console.log(timer)}, 1000);};fn();//1,1

timer的值一定是1,number类型,因为一直是这个定时器在不断的执行所以它的返回值始终是1,返回值的作用就是作为一个引用,指向setInterval,我们也可以用它来清楚定时器 clearInterval(timer)。再看下面代码,内容不变,只加了一个调用。

var num = 1;function fn() {var timer = setInterval(function () {console.log(num);console.log(timer)}, 1000);};fn();//1,1fn();//1,2

因为再一次调用了,出现了第2个定时器,所以当第2次调用时,timer的值变成了2,当然清除定时器你也可以直接用clearInterval(2);现在你知道定时器的返回值是什么了吧?返回值是一个数字,代表当前是第几个定时器而已。

2.定时器赋值为null和清除定时器不是同一个概念

很多人可能会误认为定时器复制为null就等于清楚了定时器,这个是个错误的理解。上面说了 timer只不过是setInterval的一个引用而已,你赋值timer为null,只不过是清除了timer这个变量,清除了timer的内存占用,setInterval还是存在的。看下面的代码:

var num = 1;
function fn() {var timer = setInterval(function () {console.log(num);timer = null;console.log(timer);}, 1000);
};
fn();//1,null 1,null 1,null .....

赋值了timer为null 但是还是一直输出1,就说明定时器更本没有清除。清除定时器只能用clearInterval(timer)。

var num = 1;
function fn() {var timer = setInterval(function () {console.log(num);console.log(timer);clearInterval(timer);}, 1000);
};
fn();//1,1

这样就只输出一次1,1,因为后面清除了定时器。在页面创建了大量的自定义对象,但是调用后内存无法释放,即使刷新或跳到其它页面,内存仍然没有清空,只有关闭浏览器,内存才释放,长时间使用系统会造成客户端报“虚拟内存不足,所以很多人会清除了定时器再赋值null可以释放内存占用。

var num = 1;function fn() {var timer = setInterval(function () {console.log(num);clearInterval(timer);timer =null;}, 1000);};fn();//1

3.关于定时器参数问题

相信很多人觉得定时器就2个参数,第一个是个function函数,第二个是个延时时间,这个是我们平时用的最多的。其实并不是这样的,我拿setTimeout为例来说下:

1.第一个参数函数,第二个参数为delay时间

 var num = 1;function fn() {var timer = setTimeout(function () {console.log(num);}, 1000);};fn();//1

因为 num变量再定时器函数中没有,它会向父级寻找所以num =1;其实我们可以传递参数的。

2.第一个参数函数,第二个参数为delay时间,第三个参数为传递的参数

var num = 1;function fn() {var timer = setTimeout(function (num) {console.log(num);}, 1000,'我是传递的参数');};
fn();//我是传递的参数

因为我往定时器函数中传递了参数,所以打印出来的值是我传递的参数值。其实第一个参数可以不是函数,可以是字符串。

2.第一个参数字符串,第二个参数为delay时间(使用该语法是不推荐的, 原因和使用 eval()一样,有安全风险)

var num = 1;
function fn() {var timer = setTimeout('console.log(num)', 1000);
};
fn();//1

其实它是能解析字符串,包括字符串函数,这里不能叫函数,只是写法有点区别

var num = 1;
var string = 'function (){console.log(num)}';
function fn() {var timer = setInterval('('+string+')'+"();",1000);
};
fn();

定时器里面的函数有2种写法,上面string函数(不是字符串)为例子,一种就是setInterval(string,1000);它会自己调用,还有一种就是setInterval(‘string()’,1000)

setInterval 和setTimeout 清空定时器,返回值,赋值为null的区别相关推荐

  1. setTimeout() 方法的返回值

    setTimeout() 方法的返回值 setTimeout() 方法的返回值是一个唯一的数值,这个数值有什么用呢?如果你想要终止 setTimeout() 方法的执行,那就必须使用 clearTim ...

  2. 实际开发问题解决记录: 需求是mysql执行查询 返回数据给前端 既要返回值不为NULL的列也要返回值为NULL的列(值为NULL的列列名返回给前端)

    一.查询值不为NULL 的列 我们先来看数据库所有数据 执行的sql语句:  select id,FCJ,comeCoalForecast from FCJ 查询结果如下: 看完执行查询所有数据的例子 ...

  3. 【小程序云开发】本地调试和云端测试的结果不一致,返回值result为null

    在云开发中,使用云函数会有很多坑. 1.调用云函数的时候,云函数调试时返回值不是null,但是到了前端拿到的result却是null. 2.调试云函数,本地调试和云端测试/真机测试结果不一样.表现为本 ...

  4. 【解决问题】mybatis plus 读取数据库没有返回值问题 返回值都为null

    JAVA项目中使用mybatis plus 读取MySQL数据库,其中有个字段没有返回值问题,查看SQL都正常有值,但其最后返回值都为null. 排查过程: 可以先在配置文件加上如下语句,可以在控制台 ...

  5. java 定时器返回值_javascript 函数返回值(return)、定时器(setTimeout、setInterval)...

    一.函数的返回值:return 1.函数名+括号=return后面的值 function fn1(){ return 100; } alert(fn1()); // 100 fn1()=return后 ...

  6. strcmp的返回值 Linux与Windows下区别 源代码实现区别

    strcmp的返回值 linux下的vim下: 返回值为前面的字符串的减去后面字符串的值: vs2019下: #include<iostream> using namespace std; ...

  7. c# mysql executescalar为什么返回值是空_C#中ExecuteScalar的返回值DBNull和null的值别说明...

    select 1 这样返回的object是 1 select null 这样返回的是DBNull.Value select isnull(null,1) 返回的是 1 select top 0 id ...

  8. fopen函数返回值总为NULL

    兄弟们,为什么是NULL?但是我知道我怎么解决的: 直接复制文件地址,NO NO NO! 变成"\\",就OK啦

  9. 5获取按钮返回值消息_大数据从入门到深入:JavaEE 之 项目实战 项目基础编码阶段(5)...

    2.5 学生信息删除 2.5.1 产品经理阶段 操作要求 : 点击页面的删除按钮,弹出删除提示框,确定后删除学生信息和学生的考试成绩; 2.5.2 项目经理阶段 业务分析 : 删除学生信息的时候还要删 ...

最新文章

  1. POJ3690:Constellations——题解
  2. 均方根误差有没有单位_Python误差评判:MAE、MSE、RSquare、MAPE和RMSE
  3. 解析:为什么人工智能要用Python?
  4. windows下利用_popen,_wopen创建管道进行系统命令输出数据
  5. Exchange 2010发现拓扑失败
  6. GitHub开源贡献榜:微软超越Facebook和Google排第一
  7. 操作系统上机作业--实现shell(1)(多进程)
  8. Codeforces Beta Round #8 C. Looking for Order 状压dp
  9. 集合的所有分割方式---2013年1月28日
  10. 在远程系统上开发 SharePoint 应用程序
  11. X5045的C语言源码,X5045看门狗的单片机源程序和Proteus仿真原理图
  12. ApacheCon Asia 2021 重磅开启!流处理专题 Call for Speaker
  13. vue 微信公众号 前端开发
  14. 1534 棋子游戏(博弈)
  15. 如何把几张图片合并成一张图片?
  16. 华为鲲鹏泰山服务器系统安装,鲲鹏处理器正式商用:浙江移动营业厅用上华为泰山服务器...
  17. 用计算机弹熊出没,熊出没之熊大快跑2018辅助
  18. 如何汇总100多个相同模板的电子表格
  19. 从零开始的2.5D游戏开发
  20. python列表拆包_python元组拆包

热门文章

  1. cache failed module status_Flutter混编之路——iOS踩坑记录
  2. python的xpath用法介绍_python爬虫之xpath的基本使用详解
  3. python增删改查csv文件_Python--作业2--对员工信息文件,实现增删改查操作
  4. sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...
  5. python安装函数库pip网址_批量安装python库函数---pip
  6. python理论知识选择题_Python基础自测题答案和基础知识梳理
  7. 我机器人里面的匡威照片_威尔史密斯在《我,机器人》里面穿的是匡威的那款鞋啊...
  8. css限制字体三行_讲道理,仅3行核心css代码的rate评分组件,我被自己秀到头皮发麻...
  9. Javascript 调试技巧
  10. Linux 下shell编程