鍍金池/ 問(wèn)答/HTML/ js一道題目,大家進(jìn)來(lái)瞅一瞅

js一道題目,大家進(jìn)來(lái)瞅一瞅

函數(shù)add可以實(shí)現(xiàn)連續(xù)的加法運(yùn)算
函數(shù)add語(yǔ)法如下
add(num1)(num2)(num3)...;//注意這里是省略號(hào)喲,無(wú)限
使用舉例如下:
add(10)(10)=20;
add(10)(20)(50)=80;
add(10)(20)(50)(100)=180;
請(qǐng)用js代碼實(shí)現(xiàn)函數(shù)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

這個(gè)tmp又返回tmp是什么操作,這就是傳說(shuō)中的偏函數(shù)嗎?還有toString的調(diào)用?

回答
編輯回答
舊酒館

調(diào)用函數(shù)返回函數(shù) 就可以一直()下去了 因?yàn)榉祷氐氖呛瘮?shù) 所以是打印不出數(shù)字的 修改toString 使得打印數(shù)字

2017年9月26日 20:11
編輯回答
祉小皓

這是柯里化,可以瞅瞅這個(gè)柯里化

2017年4月14日 20:58
編輯回答
妖妖
console.log( add(10)(20)(50) )

之后代碼運(yùn)行的過(guò)程是:
1.首先執(zhí)行add(10),初始化add函數(shù)內(nèi)部sum為10,

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

2.其后執(zhí)行tmp(20)即:

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

3.其后執(zhí)行tmp(50)

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

4.其后輸出時(shí)會(huì)執(zhí)行一個(gè)類(lèi)型轉(zhuǎn)換函數(shù)即被重寫(xiě)的:

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

5.輸出tmp函數(shù)以及即內(nèi)容即此時(shí)的sum:80

2017年4月4日 16:49
編輯回答
笨小蛋
var a=add(10);
console.log(a); // 10
var b=a(10);
console.log(b); // 20
console.log(a); // 20

你這代碼沒(méi)問(wèn)題?
還有閉包了解一下

2017年11月6日 17:37