函数的柯里化

函数柯里化
函数里面返回函数(高阶函数)
达到
参数复用
延时执行 多个小括号传入参数
提前确认(兼容性的检测)这三个作用

参数复用

/** 参数复用 **/
  function url_curring(protocol,hostname) {
    return function (pathname) {
      return `${protocol}${hostname}${pathname}`
    }
  }
  const url_https = url_curring('http://','www.wsg3096.com')
  const url7 = url_https('/vision')
  const url8 = url_https('/gmail')
  const url9 = url_https('/responsive')

console.log(url7,url8,url9)

提前确认(兼容性的检测)

  /** 提前确认(兼容性的检测)
   *  IE attachEvent
   *  主流都有 addEventListener
   *  element 哪个元素要进行监听
   *  type 事件类型
   *  listener 回调函数
   *  useCapture 冒泡还是捕获
   * **/
  const whichEvent = (function () {
    if (window.addEventListener){
      return function (element,type,listener,useCapture) {
        element.addEventListener(type,function (e) {
          listener.call(element,e) // 规避this 指向 使用call
        },useCapture)
      }
    } else if(window.attachEvent){
      return function (element,type,handler) {
        element.attachEvent('on'+type,function (e) {
          handler.call(element,e)
        })
      }
    }
  })()

延时执行 多个小括号传入参数

  /** 延迟执行
   * add(1)(2)(3) = 6
   * add(1,2,3)(4) = 10
   * add(1)(2)(3)(4)(5) = 15
   * **/

  function add() {
    let args = Array.prototype.slice.call(arguments)

    let inner = function () {
      args.push(...arguments)
      return inner
    }

    inner.toString = function () {
      return args.reduce(function (prev,cur) {
          return prev + cur
      })
      // return '123'
    }
    return inner
  }

  //toString不生效,其实只有函数返回值参与计算时才会自动调用toString方法,add(1)(2)(3)(4)+'' 这样试试
  console.log(add(1)(3)(4)+'')

方式二:

			function sum(a){
				return(b)=>{
					return (c)=>{
						return a+b+c
					}
				}
			}
			const result = sum(1)(2)(3)
			console.log(result);

参考:

JavaScript函数柯里化 - Web前端工程师面试题讲解_哔哩哔哩_bilibiliJavaScript函数柯里化 - Web前端工程师面试题讲解, 视频播放量 22995、弹幕量 126、点赞数 629、投硬币枚数 389、收藏人数 661、转发人数 48, 视频作者 技术蛋老师, 作者简介 难懂的知识将会变得通俗易懂 dmwll-1234(商务),相关视频:手写Promise核心代码 - JavaScript前端Web工程师,JavaScript 图片懒加载 - Web前端工程师面试题讲解,Ajax 是什么? 如何创建一个 Ajax? - JavaScript前端Web工程师,深拷贝和浅拷贝的区别 - JavaScript前端Web工程师,JavaScript map()和parseInt() - Web前端工程师面试题讲解,Fetch API - JavaScript前端Web工程师,JavaScript 你理解Promise吗 - Web前端工程师面试题讲解,JavaScript 拖拽功能 - Web前端工程师面试题讲解,Vue.js 数据双向绑定的原理及实现,Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?https://www.bilibili.com/video/BV1RA411E7aN?spm_id_from=333.999.0.0&vd_source=048053a6a8eb86e676de0c88466e8b10 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值