js一道题目,大家进来瞅一瞅

函数add可以实现连续的加法运算
函数add语法如下
add(num1)(num2)(num3)...;//注意这里是省略号哟,无限
使用举例如下:
add(10)(10)=20;
add(10)(20)(50)=80;
add(10)(20)(50)(100)=180;
请用js代码实现函数add。

function add(num){
    var sum=num,
    
        tmp=function(v){
            sum+=v;
            return tmp
        };
    
    tmp.toString=function(){
        return sum
    };
    
    return tmp
}


console.log( add(10)(20)(50) )        //80

这个tmp又返回tmp是什么操作,这就是传说中的偏函数吗?还有toString的调用?

阅读 2.9k
4 个回答
console.log( add(10)(20)(50) )

之后代码运行的过程是:
1.首先执行add(10),初始化add函数内部sum为10,

return tmp=function(v){
            10+=v;
            return tmp
        };

2.其后执行tmp(20)即:

return tmp=function(20){
            10+=20;
            return tmp
        };

3.其后执行tmp(50)

return tmp=function(50){
            30+=50;
            return tmp
        };

4.其后输出时会执行一个类型转换函数即被重写的:

tmp.toString=function(){
        return sum
    };

5.输出tmp函数以及即内容即此时的sum:80

调用函数返回函数 就可以一直()下去了 因为返回的是函数 所以是打印不出数字的 修改toString 使得打印数字

这是柯里化,可以瞅瞅这个柯里化

var a=add(10);
console.log(a); // 10
var b=a(10);
console.log(b); // 20
console.log(a); // 20

你这代码没问题?
还有闭包了解一下


不思考不学习,就会点踩?
ramdajs

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题