Javascript尾部递归而不是循环
Javascript tail recursion instead of loop
在Douglas Crockford的一次演讲中,他赞成使用尾部递归而不是循环。这个代码被出示了,
function repeat(myFunc) {
if (myFunc !== undefined) {
return repeat(myFunc);
}
}
我想定义一个myFunc,但不知道静态计数器是否可以在函数调用期间保持其状态,或者使用全局计数器。但作为javascript的新手,我想先问一下。这怎么能在一个例子中使用,比如从10倒计时到0?谢谢
您需要在某个地方调用函数myFunc
,并评估结果以供进一步调用repeat
。
function repeat(myFunc) {
if (myFunc()) {
repeat(myFunc);
}
}
var count = 10;
repeat(function () {
document.write(count + '<br>');
count--;
return count >= 0;
});
这里有一个版本,它在没有全局变量的情况下保持状态:
function repeat(myFunc, arg) {
if ((arg = myFunc(arg)) !== undefined) {
repeat(myFunc, arg);
}
}
repeat(function (count) {
document.write(count + ',');
count--;
if (count >= 0) return count;
}, 10);
这怎么能在一个例子中使用,比如从10倒计时到0?
将一个Number
传递给repeat
,用递减的数字作为参数调用repeat
,直到变量参数等于0
function repeat(n) {
console.log(n)
if (n) {
return repeat(--n);
}
}
repeat(10)
不确定我是否理解您想要的方法,但您可以使用此方法递归递减
function repeat(myFunc, times) {
if(times > 0 && typeof myFunc == 'function') {
myFunc(times);
repeat(myFunc, times-1);
}
}
repeat(alert, 10);
相关文章:
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 按照选项卡索引的顺序循环一个jQuery选择
- 循环遍历以数组为值的Javascript对象
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 循环结束/推送到数组之前在页面上呈现EJS
- 循环比赛位置算法
- jQuery循环在特定位置暂停
- 我的javascript for循环不起作用
- 循环浏览多个身体背景图像
- W3C循环样式的JavaScript
- Javascript尾部递归而不是循环