什么是闭包?带你实际操作一下,必会.

目录

先看看概念:

1、什么时候需要使用闭包

2、闭包的作用

3、闭包的形成条件

4、闭包的缺点:

动手操作!(重点)

全局变量

闭包实现


先看看概念:

1、什么时候需要使用闭包

        当我们重复使用一个对象,但又想保护这个对象不被其他代码污染。

2、闭包的作用

        使得一个外部函数有权访问一个函数内部函数作用域;

        其实闭包就是一个函数。

3、闭包的形成条件

  • 需要访问作用域
  • 函数嵌套(物理条件)
  • 被嵌套函数在另一个外部作用域中被调用

4、闭包的缺点:

        比起普通函数,闭包对内存占用更多,因此建议在使用完毕后,可以手动赋空标记,可以回收fn=null

这些太枯燥了,背会了还是不理解,不会用,接下来的才是重点,跟我一起看吧!


动手操作!(重点)

一个简单的需求:

你的老板告诉你,要你在屏幕开启的时候开始计时,每隔一秒加一;

这个需求很简单吧,也许你的第一反应就是这不就是定义一个全局变量,然后通过setInterval进行计时,没错!这个思路很清晰,But,今天的有更高级的做法,那就是通过闭包来实现;

咱们的重点是逻辑,所以我就展示逻辑了,为了测试,我们就让他计时到10的时候停止;


先来看看正常的写法 

全局变量

let second = 0;
function counter() {
  if(second === 10) {
    console.log('结束定时器')
    clearInterval(secondInterval);
    return;
   }
  second += 1;
  console.log(`${second}秒`);
}

const secondInterval = setInterval(() => {
  counter();
},1000)

看到了吧,就是这么简单,看一下结果吧


 下面就是今天的重头戏了

闭包实现

function counter() {
  let second = 0;
  function doCounter() {
     if(second === 10) {
       console.log('结束定时器')
       clearInterval(secondInterval);
       return;
     }
     second += 1;
     console.log(`${second}秒`);
   }
return doCounter
}

const doCounterFn = counter();
const secondInterval = setInterval(() => {
  doCounterFn();
},1000)

 结果

没错哈,效果是一样的,大家可以自己试一下,今天就到这里,下课!

对了,对了,祝大家劳动节快乐哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值