为何需要闭包

本文通过一个实际案例介绍闭包的概念及用途,展示如何利用闭包替代全局变量实现页面浏览时间的实时更新,避免了全局变量可能带来的问题。

一个例子来认识闭包是什么,为什么需要它

假设有一个需求,需要在页面上显示一个浏览时间,从打开页面的瞬间开始计时,每过一秒加一。

本质上说,这个业务就是一个累加器,每过一秒自增一次。

首先最简单的 「每隔一秒加一」 ,我们立刻想到的是使用计时器,每隔一秒调用一起累加器函数:

let second = 0

function counter() {
  second++
}

setInterval(function() {
  // 调用累加器
  counter()
}, 10000)

可以看到我们已经实现了所需要的功能, 这也是 最低级 的实现方法。

为什么说是 最低级呢 ,因为我们实现功能的思路是定义一个 全局变量 ,每次累加都是在更新这个全局变量。而软件开发中有一条不成文的规定就是: 尽可能少定义全局变量

大致有两个原因:

  • 难以控制 :可以在任何地方进行读写,意味着可能会被不相干的函数改写;
  • 占用内存 :全局变量占用内存的生命周期长。一般局部变量在函数调用完毕之后都会被垃圾回收器回收释放;而全局变量因为可以在任何地方进行读写,因此垃圾回收器很难做出是否应该释放全局变量的判断,因此全局变量会一直占用内存。

综上所述,我们接下来要做的工作就是实现功能的同时, 避免定义全局变量污染环境

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值