这个函数在哪里获得它的价值?

时间:2016-06-26 20:15:12

标签: javascript function inline-functions

这是一本书的例子。如果是偶数,则函数返回TRUE,否则返回FALSE。我不明白它是如何工作的。这就是我的理解:

  1. 42绑定到
  2. 创造"偶数"功能
  3. x绑定到n = 42
  4. x!= 0
  5. 发起"否则"
  6. 创造"奇怪"功能
  7. 奇数(42 - 1)
  8. 发起"!偶(41)"。
  9. 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)
    )
    
    
    

2 个答案:

答案 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。