• [Functional Programming] Match Function Requirements with Lodash Partial and Flip


    Functions returning functions returning functions can begin to look a bit unwieldy. The arrow function has helped the syntax a lot, but maybe using a curry utility function to combine all the arguments into a single function will help your syntax look a little cleaner. Currying isn't necessary for our pattern, but you'll definitely see it used in many patterns involving functions returning functions and maybe you'll grow to love it.

    import { curry, partial, flip } from "lodash"
    
    let createTimeout = curry((time, listener) => {
      let id = setTimeout(listener, time)
    
      return () => {
        clearTimeout(id)
      }
    })
    
    let addListener = curry((selector, eventType, listener) => {
      let element = document.querySelector(selector)
      element.addEventListener(eventType, listener)
    
      return () => {
        element.removeEventListener(eventType, listener)
      }
    })
    
    let createInterval = curry((time, listener) => {
      let id = setInterval(listener, time)
      return () => {
        clearInterval(id)
      }
    })
    
    //broadcaster = function that accepts a listener
    let merge = curry((broadcaster1, broadcaster2, listener) => {
      let cancel1 = broadcaster1(listener)
      let cancel2 = broadcaster2(listener)
    
      return () => {
        cancel1()
        cancel2()
      }
    })
    
    let clickOrTick = merge(
      // addListener("#button", "click"),
      partial(window.addEventListener, "copy"),
      partial(flip(setInterval), 1000) //setInterval(()=> {}, 1000)
    )
    let cancelClickOrTick = clickOrTick(() => {
      console.log("click or tick")
    })
    
    cancelClickOrTick()
  • 相关阅读:
    说一说前端路由与后端路由的区别
    HTTP 8种请求方式介绍
    JavaScript 运行机制以及Event Loop(事件循环)
    常见的数据结构
    JS中常见的几种继承方法
    JS异步编程
    js中的数据类型,以及如何检测数据类型
    js面试题之手写节流函数和防抖函数
    前端面试题
    (八) SpringBoot起飞之路-整合Shiro详细教程(MyBatis、Thymeleaf)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13869674.html
Copyright © 2020-2023  润新知