这是我参与更文挑战的第19天,活动详情查看: 更文挑战前端
纸上得来终觉浅,绝知此事要躬行。哪怕是平时一个不起眼的小知识,咱们也须要以认真的态度去学习,不然,说不定何时就会踩到坑,伤害到彼此!程序员
无论文章水不水,前戏都必须作足,不然写不下去啊,O(∩_∩)O哈哈~编程
以前发布了《前端 JavaScript 之『防抖』的简单代码实现》这篇文章以后,有一位朋友发了这么一条评论:markdown
我在写代码时有一个习惯:就是对已经销毁的变量随手赋一个 null,好比这样的:oop
据说这样销毁的更完全哦o( ̄▽ ̄)d。post
针对上面这位朋友的建议,我也不肯定是否是正确,好像平时也确实不多见到在 cleatTimeout 以后再赋值为 null 的操做。学习
对于不能肯定的问题,我只坚信一个原则——实践是检验真理的惟一标准,既然有了困惑,那就动手验证好了。没错,我就是这么直接,请不要惊讶!︿( ̄︶ ̄)︿spa
原本觉得是很简单的一次验证而已,洒洒水啦!但是,谁想却发生了意外,不信你看:3d
What?! setTimeout 的返回值是一个数字!!就问你:惊不惊喜意不意外?code
好歹作了几年开发了,我竟然不知道这个事,简直弱爆了!不过话说回来,谁平时会闲着没事去打印它的返回值啊,咱们用的是它的功能好很差。
为何会出现这么个结果呢?咱们来看看 MDN 上怎么说:
返回值
timeoutID
是一个正整数,表示定时器的编号。这个值能够传递给clearTimeout()
来取消该定时器。
看来这是常识性问题,只怪我平时没注意啊,看来平时要增强基础知识的储备了!
至于为何 timer 的值一直在增长,MDN 上是这样解释的:
在同一个对象上(一个window或者worker),
setTimeout()
或者setInterval()
在后续的调用不会重用同一个定时器编号。可是不一样的对象使用独立的编号池。
timer 每次执行的本质是生成了一个新的延时器,属于不一样对象,因此编号发生了改变。
原本还想要再看看 setInterval 的,可是看到这个解释,我就打消了验证的念头,那必然又是一次”惊喜“。
通过了前面这个意外,让我知道了本身的无知。但意外也是最好的鞭策,即便惭愧,可是开头所说的验证仍是得往下走。
如今咱们知道了一个真理:setTimeout 的返回值是一个表明延时器对象惟一身份标识的数字,那么在 clearTimeout() 以后,它的值到底会变成什么呢?请看大屏幕:
咱们看到,在调用 clearTimeout() 方法销毁延时器后,timer 的值并未被清空。
通过上面的验证,咱们能够得出如下结论:
以上总结适用于全部定时器(计时器和延时器)。
嗯,看来我随手赋一个 null 的作法仍是比较合理的,毕竟是起到了那么一丝丝的做用的( ̄︶ ̄)↗。
随手赋 null 是一个好习惯!( ̄▽ ̄)~*
随手赋 null 是一个好习惯!( ̄▽ ̄)~*
随手赋 null 是一个好习惯!( ̄▽ ̄)~*
其实,今天这个验证也证明了另外一个道理:咱们平时最忽视的,每每是咱们自觉得最熟悉的,伤害了对方而不自知!
你品,你细细品!
~
~
~ 本文完,感谢阅读!
学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!
你们好!我是〖编程三昧〗的做者 隐逸王,个人公众号是『编程三昧』,欢迎关注,但愿你们多多指教!
知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!