为什么这个函数返回一个字符串而不是总和?
function sum(a){
if(!a) return 0;
return b=>a + sum(b);
}
console.log(sum(2)(3)); // returns a string "ab=>a + 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)()调用此字符串,因此当您尝试将该字符串视为可调用的内容时会出现错误。