leo*_*mes 4 javascript boolean arrow-functions
在阅读 Javascript Allonge 时,我陷入了试图找出原因的困境中;
((n) => {
const even = (x) => {
if (x === 0)
return true;
else
return !even(x - 1);
}
return even(n)
})(97)
Run Code Online (Sandbox Code Playgroud)
根据提供的数字是奇数还是偶数返回 true 或 false。
当我查看它时,我认为它正在检查提供的数字是否为 0,如果不是减去 1,则再次检查。这意味着数字最终达到 0 并返回 true。这显然不是正在发生的事情,因为 97 返回 false,96 返回 true。
我在这里唯一不知道的是之前的爆炸声return !even(x -1);。
哦,这太可怕了,但以一种奇妙的方式。编写代码来检查奇数和偶数是多么好的方法啊!
首先要注意的是,这是一个递归函数:它重复调用自身。每次,它都会减少相关的数字,因此最终会一直下降到0。
这段代码所做的“聪明”的事情是!,它反转函数调用的布尔结果。true成为false并false成为事实。您可以重复执行此操作:!!trueistrue和!!!trueis false。
本质上,这段代码可以简化为如下所示:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!true;
Run Code Online (Sandbox Code Playgroud)
如果有偶数个!否定,我们最终会得到true。如果有奇数,我们最终得到false。
您引用的代码将n 个 !逻辑 NOT 运算符添加到true,其中n是我们正在测试的值。奇数个!s 会导致false; 偶数结果为true.
这是聪明的代码:它不是在生产中使用的好代码!它比简单测试慢 1200 倍左右% 2。