加入收藏
举报
02-14 18:37
#0
文件名称:
一个例子来认识闭包是什么,为什么需要它.md
所在目录:
docs / JavaScript
文件大小:
1.44 KB
下载地址:
i-want-offer/FE-Essay
   
免责声明:本网站仅提供指向 GitHub 上的文件的链接,所有文件的版权归原作者所有,本网站不对文件内容的合法性、准确性或安全性承担任何责任。
文本预览:
# 一个例子来认识闭包是什么,为什么需要它
假设有一个需求,需要在页面上显示一个浏览时间,从打开页面的瞬间开始计时,每过一秒加一。
本质上说,这个业务就是一个累加器,每过一秒自增一次。
首先最简单的 **「每隔一秒加一」** ,我们立刻想到的是使用计时器,每隔一秒调用一起累加器函数:
```js
let second = 0
function counter() {
second++
}
setInterval(function() {
// 调用累加器
counter()
}, 10000)
```
可以看到我们已经实现了所需要的功能, 这也是 **最低级** 的实现方法。
为什么说是 **最低级呢** ,因为我们实现功能的思路是定义一个 **全局变量** ,每次累加都是在更新这个全局变量。而软件开发中有一条不成文的规定就是: **尽可能少定义全局变量** 。
大致有两个原因:
* **难以控制** :可以在任何地方进行读写,意味着可能会被不相干的函数改写;
* **占用内存** :全局变量占用内存的生命周期长。一般局部变量在函数调用完毕之后都会被垃圾回收器回收释放;而全局变量因为可以在任何地方进行读写,因此垃圾回收器很难做出是否应该释放全局变量的判断,因此全局变量会一直占用内存。
综上所述,我们接下来要做的工作就是实现功能的同时, **避免定义全局变量污染环境** 。
点赞 回复
回帖
支持markdown部分语法 ?