前段时间看到群里有人发的关于柯里化的面试题,看到感觉挺有趣的

很久没上网写随笔了,最近看一个 c 的教学录像,被那个老师激励了,就记起博客园,真有段时间被遗忘掉。。。

记得之前在群里面看到有一道面试题,要求写一个 function,在叫用后返回任意参数的和。要求出来结果是这样的:

sum(1,2)  // 返回3

sum(1)(2) // 返回3

sum(1)(2,3) // 返回6

sum(1)(2)(3) //返回6

当时看了感觉很有趣,也不知道什么是柯里化,今天不知道为什么突然想起这个题目 ,最近刚好看到有人说柯里化的话题,就在chrome的调试模式试着 做了一下:

 1 function sum(){
 2     let _arg = [];
 3     _arg.push(...arguments);
 4     var ret = function(){
 5         _arg.push(...arguments);
 6         // arguments.callee.valueOf=()=>(_arg.reduce((a,b)=>a+b,0));
 7         return arguments.callee;
 8     }
 9     ret.valueOf=()=>(_arg.reduce((a,b)=>a+b,0));
10     return ret;
11 }

这里重点就是valueOf,js原生对象基本都有toString和valueOf 方法, 除了 null和undefined,如果valueOf返回原生对象本身,这里覆盖掉返回的function的valueOf,使其返回希望得到的结果(参数的求和)。

另外还有个闭包的,在sum里面声明 _arg 返回的函数需要每次调用的时候存储到一个集合里面,作为最后求和用。简单的满足 题目要求。

 

希望坚持记录,一点一点积累 的过程。

名词解释(摘录百度百科):

 

转载于:https://www.cnblogs.com/KevinHo/p/8930861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值