为什么这个函数返回一个字符串而不是总和?

function sum(a){
    if(!a) return 0;
    return b=>a + sum(b);
}


console.log(sum(2)(3)); // returns a string "ab=&gta + sum(b)"
console.log(sum(2)(3)()); // says sum (..)(..) is not a function

回答

当你写:

console.log(sum(2)(3));

这可以重写为:

const fn = sum(2);
console.log(fn(3));

如果您查看sum(2)返回的内容,它将返回另一个函数:

return b=>a + sum(b);

然后使用 调用此函数fn(3),执行:

2 + sum(3)

当您调用 时sum(3),您将再次返回与上述相同的函数,因此您正在执行以下操作:

2 + function

由于加法在数字和函数之间不起作用,JS 将尝试通过调用.valueOf()您的函数将函数转换为原始函数。调用.valueOf()一个函数将返回它的字符串版本,因此2 + function在你的函数和数字 2 之间执行连接,给你:

2b=>a + sum(b)

您第二次尝试sum(2)(3)()调用此字符串,因此当您尝试将该字符串视为可调用的内容时会出现错误。


以上是为什么这个函数返回一个字符串而不是总和?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>