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

很久没上网写随笔了,最近看一个 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 返回的函数需要每次调用的时候存储到一个集合里面,作为最后求和用。简单的满足 题目要求。

 

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

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

 

posted @ 2018-04-24 15:15  暴走  阅读(110)  评论(0编辑  收藏  举报