我在完成作业时遇到了以下代码。我可以理解为什么表达式(thrice(add1))(0)
的计算结果为4.如果我们定义f(x) = x + 1
,(thrice(add1))(0)
将被评估为f(f(f(x)))
((x+1)+1)+1
。但是,我不太清楚为什么((thrice(thrice))(add1))(0)
会评估为27
,而不是3*3=9
。
//Javascript
function thrice(f) {
return compose(compose(f, f), f);
}
function compose(fun,fun2) {
return function (n) {
return fun(fun2(n));
};
}
function add1(k) {
return k + 1;
}
console.log(((thrice(thrice))(add1))(0)); //27
console.log((thrice(add1))(0)); //3
答案 0 :(得分:0)
内心(三次):
thrice(1) returns ---> function (n) { return fun(fun2(n));
外(三次):
thrice(1) returns ---> function (n) { return fun(fun2(n));
thrice(1) returns ---> function (n) { return fun(fun2(n));
thrice(1) returns ---> function (n) { return fun(fun2(n));
Outer(add1)将add1函数引入范围。
当声明0时,add1将其插入为k。 add1函数解析。
K现在是一个。 我们现在回到原来的()了。 变量n现在等于1。function2或(fun2)变为add1。
然后外部'fun'变为add1。
一次三次返回= 3。
第三次发生外部三次,内部三次返回三次。
它第二次迭代,它是三个*三。
最后一次是9 * 3。