这是一本书的例子。如果是偶数,则函数返回TRUE,否则返回FALSE。我不明白它是如何工作的。这就是我的理解:
JS做什么"偶数(41)"? TRUE来自哪里?我理解的方式只有在x === 0
时才会返回TRUE
document.write(
((n) => {
const even = (x) => {
if (x === 0) return true;
else {
const odd = (y) => !even(y);
return odd(x - 1);
}
}
return even(n)
})(42)
)

答案 0 :(得分:3)
故意混淆。遵循逻辑。
如果n不为0,我们创建一个名为odd的新函数,它调用even并反转even的布尔值。
然后我们用n-1调用该函数。
从本质上讲,它就像一个while循环,你可以从数字中减去1并在每一步更深地反转它的真实性或虚假性,直到你得到0.如果函数被称为偶数次,那就是偶数。如果它被称为奇数次,那就奇怪了。
答案 1 :(得分:0)
以下代码执行与书籍示例相同的逻辑,包括使用递归,但如果使用非整数或负值调用@post = Post.find(params[:id])
,则会阻止无限循环。
isEven
现在,替补逻辑测试非常简单:
const isEven = (n) =>
{
const even = (x) => x ? !even(x-1) : true;
return even( Math.abs(Math.floor(n)));
}
isEven( 42)
依此类推更高的数字。参数值的每个增量执行对even的附加递归调用,这补充了它下面的数字的“even-ness”,直到达到零,硬编码为偶数。
最终结果是,如果even( 0) returns true;
even( 1) returns !even( 1-1), which is !even(0), which is false;
even( 2) returns !even( 2-1), which is !even(1), which is true;
被调用奇数次(对于偶数)even
返回isEven
;如果true
被调用偶数次(对于奇数)even
返回false。