js柯里化的一个应用

听到同学说面试一道题目

add(1)(2)(3)(4);//10

查询了下资料  这是一个js里面的柯里化 现象

    add_curry防范返回的是一个 retVal,并不是执行结果。这里的代码很想递归,但是不是这样。

   每调用一次retVal 都会将参数传给他, 而之前的seed会一直保留(add_curry 营造了一个闭包,seed得以一直保存)。

 1 function add_curry( seed ) {
 2 
 3         console.log("a"+seed);
 4     function retVal( later ) {
 5         console.log("b"+seed);
 6         console.log("b"+later);
 7         return add_curry( seed + later );
 8     }
 9     retVal.toString = function() {
10         return seed;
11     }
12     return retVal;
13 
14 }
15 
16 console.log(add_curry(1)(2)(3)(4));
17 //我们看console.log打印结果
18 a1    
19 b1 
20 b2
21 a3 
22 b3 
23 b3
24 a6 
25 b6 
26 b4 
27 a10 
28 10
add_curry(1)(2)(3)(4) 的调用过程是:add_curry(1) -> ret(2) ->add_curry(3) -> ret(3) ->add_curry(6) -> ret(4) ->add_curry(10);
Now or nerver .
原文地址:https://www.cnblogs.com/iyueyao/p/3283000.html