JavaScript高阶函数repeat及unless判断数字奇偶的运行逻辑疑问
问题1:代码中高阶函数的运行逻辑
这段代码里的repeat和unless都属于高阶函数(接收函数作为参数的函数都属于高阶函数),具体执行流程按顺序拆解:
- 第一步定义
repeat函数:接收两个参数,第一个是循环次数n,第二个是每次循环要执行的函数action,内部通过for循环执行n次action,每次把当前循环索引i传给action作为入参。 - 第二步定义
unless函数:接收两个参数,第一个是判断条件test,第二个是条件匹配时要执行的函数then,内部逻辑为如果test的布尔值为假,就执行then函数。 - 第三步调用
repeat(3, 回调函数)触发完整执行流:- 第一次循环,索引为0,将0传给回调的入参
n,执行unless(0%2 == 1, 打印函数):此时0%2 == 1的结果为false,触发then执行,打印0 is even - 第二次循环,索引为1,将1传给入参
n,执行unless(1%2 == 1, 打印函数):此时1%2 == 1的结果为true,不触发then执行,无输出 - 第三次循环,索引为2,将2传给入参
n,执行unless(2%2 == 1, 打印函数):此时2%2 == 1的结果为false,触发then执行,打印2 is even
- 第一次循环,索引为0,将0传给回调的入参
问题2:奇偶判断逻辑
代码使用取模运算符%实现奇偶判断:
- 取模运算符的作用是求两个数相除的余数,任意整数和2取余,结果只会是0或者1
- 如果
n % 2 == 1成立,说明该数除以2余1,是奇数 - 如果
n % 2 == 1不成立,说明该数除以2余0,是偶数,对应代码里就会触发偶数的打印逻辑
内容的提问来源于stack exchange,提问作者user14542154
相关产品推荐
相关产品推荐

