JS中的函数柯里化add(1, 2)、 add(1)(2)

5 篇文章 0 订阅

1. 概念
”函数柯里化”是指将多变量函数拆解为单变量的多个函数的依次调用, 可以从高元函数动态地生成批量的低元的函数。简单讲:就是利用函数执行,可以形成一个不销毁的私有作用域,把预先处理的内容都存在这个不销毁的作用域里面,并且返回一个函数,以后要执行的就是这个函数。
面试过程中很多朋友应该都碰到过下面这个栗子:

// 常规的add函数
function add(x, y) {
    return x + y
}

// Currying后
function curryingAdd(x) {
    return function (y) {//形成闭包x变量不会被销毁
        return x + y
    }
}

add(1, 2)           // 3
curryingAdd(1)(2)   // 3

如果我们无限add(1, 2)(3)(4,5,6)…、 add(1)(2)(3)(4)(5)(6)…

function add(...args) {
  let sum = [...args]
  function inner(...args1) {
    sum.push(...args1)
    return inner
  }
  inner.toString = function () { // 重写toSting() 方法改写函数的默认返回值
    return sum.reduce(function(pre,cur){
      return pre+cur
    },0)
  }
  return inner
}
add(1, 2)(3)(4,5,6)//21
 add(1)(2)(3)(4)(5)(6)//21

2.toString的作用
return fn; fn是一个函数类型的变量,因为fn后面没有括号,所以得到的是函数体源码(如下图)。想要得到函数体的源码,就会调用toString方法。因此我们可以重新toString得到我们想要的
在这里插入图片描述

let a={}
let b={name:'zhangsan',age:66}
let c={}
c[a]='one'
c[b]="two"
console.log(c[a])//two
为什么会是‘two’
因为object中的key为一个对象的时候,会调用toString进行转换成"[object Object]"
因此会被第二个覆盖
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值