var fn = function even (n) {
if (n === 0) {
return true
}
else return !even(n - 1)
}
fn(5)//=> false
fn(2) //=> true
为什么这个功能会像它一样工作?当我在参数为5时逐步执行它时,它似乎调用自身直到n为零,这将返回true但返回false。
答案 0 :(得分:5)
每个递归步骤都会对前一个结果添加否定:
f(0) = true
f(1) = !f(0) = !true = false
f(2) = !f(1) = !!f(0) = !!true = !false = true
依此类推,对于f(5)你得到
f(5)
!f(4)
!!f(3)
!!!f(2)
!!!!f(1)
!!!!!f(0)
!!!!(!true)
!!!(!false)
!!(!true)
!(!false)
!true
false
答案 1 :(得分:0)
这是因为!
当函数为0时,返回true。
当它为1时它将返回!偶数(0) - >假的。
当它为2时它将返回!even(1)=> !(!even(0))=> !(假)=>真。
由于布尔值为true,表示两个可能的值,并且您可以反复切换它们。