为什么这个函数返回true?

2 javascript recursion lambda functional-programming function

const res = (n => {
  const even = x => {
    if (x === 0)
      return true
    else {
      const odd = y => !even(y)
      return odd(x - 1)
    }
  }
  return even(n)
})(42)

console.log(res) //=> true
Run Code Online (Sandbox Code Playgroud)

因为在参数中使用了42,但是只有当x为0并严格等于其类型和值时才会返回true,我不确定为什么返回true.我认为任何值,但0应该返回false.有人可以向我解释一下,我对javascript和编程很新.

Nin*_*olz 6

如果你用局部函数和IIFE去除所有不必要的部分,那么你只得到一个零的测试,那么它是一个偶数值或递归调用,甚至没有减少一个值.

const even = x => x === 0 || !even(x - 1);

console.log(even(42)) // true
console.log(even(43)) // false
Run Code Online (Sandbox Code Playgroud)

发生的是一个递归调用 even

 n  result of calling  simplified
--  -----------------  ----------
 8  !even(7)           !even(7)
 7  !!even(6)          even(6)
 6  !!!even(5)         !even(5)
 5  !!!!even(4)        even(4)
 4  !!!!!even(3)       !even(3)
 3  !!!!!!even(2)      even(2)
 2  !!!!!!!even(1)     !even(1)
 1  !!!!!!!!even(0)    even(0)
 0  !!!!!!!!true       true
Run Code Online (Sandbox Code Playgroud)