闭包/递归

文章目录


前言

        闭包/递归——让javascript拥有更多可能,能够熟练使用闭包和递归是跃进成为一名成熟前端必要掌握的技能,前端在处理一些复杂逻辑上,闭包/递归使得化繁为简、让不可能有可能


一、闭包简介

        闭包 是能够读取其他函数内部变量的函数。听起来有点绕口,本质上闭包是将函数内部和函数外部连接起来的桥梁。

        递归 是函数在内部调用其本身,那么这个函数就是递归函数。

二、实战应用场景案例

1.实现跑马灯效果(递归的运用)

        需求场景描述,基于Vue项目之上,实现一个点击抽奖的轮盘跑马灯效果

代码如下(示例):

move(start, step, loop) {
      const _this = this
      this.canRun = false
      setTimeout(function () {
        if (start < loop) {
          _this.maskList = [1, 1, 1, 1, 1, 1, 1, 1]
          _this.maskList[start % 8] = 0
          start++
          _this.move(start, step, loop)
        } else {
          _this.canRun = true
          _this.showPrizeModal = true
        }
      }, step)
}

luckDraw() {
      if (!this.canRun) return
      this.chance < 1 ? (this.chance = 4) : this.chance--
      this.move(0, 80, 25)
 }



2.倒计时函数(闭包的运用)

代码如下(示例):

function DownTime(minutes, fn) {
  clearInterval(downFn)
  let thisEndTime = new Date().getTime() + minutes * 60 * 1000
  var downFn = setInterval(() => {
    let newTime = new Date().getTime() 
    let backTime = thisEndTime - newTime 
    var m = Math.floor(backTime / (1000 * 60) % 60)
    var s = Math.floor(backTime / 1000 % 60)
    if (backTime < 0) {
      clearInterval(downFn)
    }
    fn(m, s, downFn)
  }, 1000)
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值