我最近开始学习 JS,这是我第一次涉足函数式语言领域。
在 npm 模块中做“蹦床”练习,functional-javascript-workshop
发现我自己的解决方案和官方解决方案之间有一个有趣的区别。两者都工作得很好,但我不知道它们之间的实际区别到底是什么。我非常了解自己的解决方案,但不完全理解为什么另一个也有效。
我的解决方案
function repeat(op, num) {
var _repeat = function() {
if (num <= 0) return;
op();
return repeat(op, --num);
};
return _repeat;
}
function trampoline(f) {
while (f instanceof Function) {
f = f();
}
return f;
}
module.exports = function(op, num) {
return trampoline(repeat(op, num));
};
官方解决方案
function repeat(operation, num) {
return function() {
if (num <= 0) return
operation()
return repeat(operation, --num)
}
}
function trampoline(fn) {
while(fn && typeof fn === 'function') {
fn = fn()
}
}
module.exports = function(operation, num) {
trampoline(function() {
return repeat(operation, num)
})
}
具体来说,我对最后一部分很好奇——为什么官方解决方案会创建一个匿名函数而不是仅仅传递repeat
?