【发布时间】:2013-11-05 13:59:57
【问题描述】:
我来自 c++ 背景,所以对回调机制不是很清楚。 与 java-script 混淆以实现递归。有人请帮忙。
这就是我想要达到的目标。
Method 1(on success - call Method2);
Method 2(on success - call Method3);
Method 3(on success - call Method1)
这是我的代码。
function Method1(val1, val2, callback) {
console.log('Method1' + val1);
callback(val1, Method3);
}
function Method2(val1, fn) {
console.log('Method2 ' + val1);
val1++;
fn(val1);
}
function Method3(val){
console.log('Method3 ' + val);
val++;
if(val > 1000) process.exit(0);
else {
Method1(val,2, Method2);
}
}
Method1(1,2,Method2);
一旦我运行它就会抛出 RangeError: Maximum call stack size exceeded 错误。 javascript中如何实现递归?
编辑: 我正在写一个网络爬虫。 这就是我想要实现的。
1. Get the URL to be crawled.
2. Store the content(webpage) in a file.
3. Parse the content. Get all the links in the file.
4. call step 2 for each link in the content.
这只能通过递归来实现。我知道必须有终点/出口点。 一旦我解析了所有网络链接,我的退出点可能就在这里。它应该退出。
【问题讨论】:
-
你的递归流程永远不会停止。
-
我已经添加了。我需要实现超过一百万次的递归。
-
Javascript 不支持尾调用优化。一切都只是压入堆栈,但在达到最终情况之前不会弹出。在满足结束条件之前,您正在最大化堆栈大小。
-
@thgaskell 有什么办法可以克服吗?
-
如果你需要运行一百万次,递归可能不是最好的方法。你想做什么?
标签: javascript node.js recursion