纸上得来终觉浅,绝知此事要躬行。哪怕是平时一个不起眼的小知识,我们也需要以认真的态度去学习,否则,说不定什么时候就会踩到坑,伤害到彼此!

前戏

不管文章水不水,前戏都必须做足,否则写不下去啊,O(∩_∩)O哈哈~

之前发布了《前端 JavaScript 之『防抖』的简单代码实现》这篇文章之后,有一位朋友发了这么一条评论:

我在写代码时有一个习惯:就是对已经销毁的变量随手赋一个 null,比如这样的:

听说这样销毁的更彻底哦o( ̄▽ ̄)d。

针对上面这位朋友的建议,我也不确定是不是正确,好像平时也确实很少见到在 cleatTimeout 之后再赋值为 null 的操作。

对于不能确定的问题,我只坚信一个原则——实践是检验真理的唯一标准,既然有了困惑,那就动手验证好了。没错,我就是这么直接,请不要惊讶!︿( ̄︶ ̄)︿

意外

本来以为是很简单的一次验证而已,洒洒水啦!可是,谁想却发生了意外,不信你看:

What?! setTimeout 的返回值是一个数字!!就问你:惊不惊喜意不意外?

好歹做了几年开发了,我居然不知道这个事,简直弱爆了!不过话说回来,谁平时会闲着没事去打印它的返回值啊,我们用的是它的功能好不好。

为什么会出现这么个结果呢?我们来看看 MDN 上怎么说:

返回值timeoutID是一个正整数,表示定时器的编号。这个值可以传递给clearTimeout()来取消该定时器。

看来这是常识性问题,只怪我平时没注意啊,看来平时要加强基础知识的储备了!

至于为什么 timer 的值一直在增加,MDN 上是这样解释的:

在同一个对象上(一个window或者worker),setTimeout()或者setInterval()在后续的调用不会重用同一个定时器编号。但是不同的对象使用独立的编号池。

timer 每次执行的本质是生成了一个新的延时器,属于不同对象,所以编号发生了改变。

本来还想要再看看 setInterval 的,但是看到这个解释,我就打消了验证的念头,那必然又是一次”惊喜“。

验证

经过了前面这个意外,让我知道了自己的无知。但意外也是最好的鞭策,即使惭愧,但是开头所说的验证还是得往下走。

现在我们知道了一个真理:setTimeout 的返回值是一个代表延时器对象唯一身份标识的数字,那么在 clearTimeout() 之后,它的值到底会变成什么呢?请看大屏幕:

我们看到,在调用 clearTimeout() 方法销毁延时器后,timer 的值并未被清空。

总结

经过上面的验证,我们可以得出以下结论:

  1. 延时器方法 setTimeout() 的返回值是一个代表定时器唯一身份标识的编号;
  2. 这个编号是定时器一生成就带的,定时器执行过程中,编号不会发生变化;
  3. 计时器 setInterval 和 延时器 setTimeout 共用一个编号池,且所有编号都不会重复;
  4. 在调用了定时器销毁方法(clearTimeout 和 clearInterval)后,定时器编号不会被清空。

以上总结适用于所有定时器(计时器和延时器)。

嗯,看来我随手赋一个 null 的做法还是比较合理的,毕竟是起到了那么一丝丝的作用的( ̄︶ ̄)↗。

随手赋 null 是一个好习惯!( ̄▽ ̄)~*

随手赋 null 是一个好习惯!( ̄▽ ̄)~*

随手赋 null 是一个好习惯!( ̄▽ ̄)~*

其实,今天这个验证也证实了另一个道理:我们平时最忽视的,往往是我们自以为最熟悉的,伤害了对方而不自知!

你品,你细细品!

~

~
本文完,感谢阅读!

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好!我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

setTimeout(〒︿〒) 请原谅我一直以来对你的忽视相关推荐

  1. 哥哥,请原谅妹妹的自私!妹妹想做你的新娘...超级感人

    看完这篇文章,我潸然泪下,不知道这是否是真实的故事,希望大家有时间看看.一个老矿工死了,留下了一对孩子,一男一女,男孩八岁,女孩儿五岁,都不是他亲生的,是他收养的孩子,男孩儿在前,女孩儿在后. ­­ ...

  2. 请原谅,我还来不及长大

    <开往天国的列车> 雨水已经将我的血液带回了大地, 这是生养我的故土. 请原谅,我还来不及长大. 虽然,我也梦想能建设国家. 可是,我再也不能从土壤里发芽开花. 列车带我到了天国, 爸爸妈 ...

  3. 请原谅我不会逢场做戏

    我又失败了!还是那样,似乎注定的失败,不是不再状态,而是我深知自己的真实状态,没有真才实学,那种有实力的自信是装不出来的,做不到自欺欺人,心有不安,也是心有不甘! 请原谅我不会逢场做戏,虽然他们都是合 ...

  4. 他是国家的儿子 如不再优秀请原谅他

    "我只是个一般的父亲,我想给孩子最棒的呵护,让他不受损伤.可就是这么简略的使命,我做不到." --刘翔父亲 刘学根 "如今刘翔是国家的儿子,等奥运会后才华还给我.假若有一 ...

  5. 念念不忘,必有回响!6月更文活动的一些总结

    过去这一个月,过出了兵荒马乱的感觉. 在昨晚(2021.6.30),当点击完"确定并发布"按钮的那一刻,我竟有种"逃出生天"的庆幸,不知道是庆幸自己终于坚持下来 ...

  6. 在Stack Overflow如果语言有问题,请写以下英文

    2019独角兽企业重金招聘Python工程师标准>>> 如果英文是你的外语(Second language),提示潜在回复者你有潜在的语言困难是很好的: [译注:以下附上原文以供使用 ...

  7. 一个或多个实体的验证失败。 有关更多详细信息,请参见“ EntityValidationErrors”属性

    使用代码优先方法为数据库播种时出现此错误. 一个或多个实体的验证失败. 有关更多详细信息,请参见'EntityValidationErrors'属性. 老实说,我不知道如何检查验证错误的内容. Vis ...

  8. 请允许我悄悄的爱你一次好吗 zz

    发信人: 鹤子小 (鹤子小), 信区: First 标  题: 请允许我悄悄的爱你一次好吗 发信站: 一塌糊涂 BBS (Sat Aug 14 11:12:44 2004), 本站(ytht.net) ...

  9. php xml扩展,php-SimpleXML,请不要扩展实体

    我正在使用SimpleXML尝试使用 我曾考虑过"预解析" XML文件,以在将文件内容传递给XML解析器之前去掉 (请原谅上面的任何错误术语:我已经很长时间没有完成此级别的XML了 ...

最新文章

  1. 使用 mkdocs 搭建个人 wiki 站点
  2. Node.js使用NodeMailer发送邮件
  3. 【干货】iOS9的新特性UI Tests
  4. 网络开源框架之libevent使用实例
  5. 电路知识--认识原理图(三)
  6. The import com.sun.tools cannot be resolved
  7. 【推荐】飞鸽传书2013官方下载
  8. axure插件怎么用_CAD插件不会用怎么行?CAD插件大全合集,超实用绘图软件,高效...
  9. RCON 服务器命令协议
  10. verilog将像素数据写入txt_【测试工具】测试数据生成工具datafaker
  11. 【元胞自动机】基于matlab元胞自动机模拟交通流【含Matlab源码 355期】
  12. InfluxDB在Win10安装与简单入门
  13. 网易交互设计师微专业 目录
  14. 高性能计算专业应用软件大观
  15. 浅谈微信小程序和微信公众平台
  16. 哪款立体声骨传导蓝牙耳机好,推荐几款目前主流的骨传导耳机
  17. android设置输入数字英文,android 安卓editext默认弹出英文输入法,只能输入英文与数字(示例代码)...
  18. Codeforces 645B Mischievous Mess Makers【逆序数】
  19. 设计模式|代理模式、以《安家》为模型轻松理解静态代理和动态代理
  20. 从程序员到项目经理(二十一):谁都需要成就感

热门文章

  1. 如何在JUnit4中按特定顺序运行测试方法?
  2. Java 8中的::(双冒号)运算符
  3. 如何在python中检查文件大小?
  4. 如何设置Win11账户密码有效期?Win11账户密码使用期限设置教程
  5. win11如何取消开机自检 windows11取消开机自检的设置方法
  6. Python基础-文件操作
  7. java反射获取实体类_java 反射获取类对象的三种方式
  8. 麦克纳姆轮全向移动机器人自旋转运动分析
  9. 中外合作有开计算机课吗,探究中外合作办学计算机应用课程建设.doc
  10. python 加速方法_24种方法加速你的Python