最近在用js处理任务的时候发生了栈溢出问题, 原来是递归调用函数的次数太多, 函数栈没有来得及释放导致, 用 setTimeout 调用递归函数解决了我的问题, 但是还有一些不明之处, 请大家指教!
func1 = function(i) {
i += 1;
console.log(i);
if (i > 1000000) {
return;
}
return func1(i);
};
func1(0);
func2 = function(i) {
i += 1;
console.log(i);
if (i > 1000000) {
return;
}
return setTimeout((function() {
return func2(i);
}), 0);
};
func2(0);
我的疑惑就是 setTimeout 中的函数调用时, 之前的函数堆栈有没有被释放呢? 如果有的话变量 i 是怎么传进去的; 如果没有的话, 这段代码为什么不会栈溢出。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.