gpt4 book ai didi

javascript - 函数式 JavaScript : Closure & Recursion. 为什么会失败?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:40:01 26 4
gpt4 key购买 nike

期望的功能:

mult(3);
//(x) => 3 * mult(x)
mult(3)(4);
//(x) => 3 * (4 * mult(x))
mult(3)(4)();
//12

尝试:

function mult(x){
if(x === undefined){
return 1;
}else{
return (y => x * mult(y));
}
}

结果:

mult(3)
//y => x * mult(y)
//looks pretty good

mult(3)()
//3
//exactly what I want so far.

mult(3)(4)()
//Uncaught TypeError: mult(...)(...) is not a function

果然,

mult(3)(4)
//NaN

不过 mult(3) 看起来不错,typeof mult(3) === "function"

什么给了?我能不能在 JS 中这么花哨?为什么不呢?

最佳答案

mult(3)(4)

mult(3) 产生 y => 3 * mult(y)

因此

(y => 3 * mult(y))(4)

成为

3 * mult(4)

mult(4) 产生 y => 4 * mult(y)

3 * (y => 4 * mult(y))

是胡说八道,因为您正试图将 3 乘以一个函数。这就是为什么您会在此处得到 NaN,而 NaN 本身无法进一步应用。


可能的解决方案:

function mkmult(acc) {
return x =>
x === undefined
? acc
: mkmult(acc * x);
}

const mult = mkmult(1);

console.log(mult(3)());
console.log(mult(3)(4)());
console.log(mult(3)(4)(5)());

关于javascript - 函数式 JavaScript : Closure & Recursion. 为什么会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com