在JavaScript中创建异步函数

在JavaScript中创建异步函数,javascript,recursion,function-call,Javascript,Recursion,Function Call,可以在javascript中调用函数而不等待结果吗?我有很多递归调用,它们会消耗大量内存,所以有时会“超过最大调用堆栈大小” 这是不可能的,与等待函数返回无关。您遇到的问题是,您正在调用函数中的函数 调用函数后,调用函数的状态被推送到堆栈上。如果它随后调用另一个函数,那么状态将被推送到堆栈上。堆栈必须增长。您需要查看您的设计,以及递归是否适合您的问题 如果您不需要函数的结果,或者需要等待它返回,那么您需要递归吗 setTimeout( function(){ ..... }, 0 ) 你能展

可以在javascript中调用函数而不等待结果吗?我有很多递归调用,它们会消耗大量内存,所以有时会“超过最大调用堆栈大小”

这是不可能的,与等待函数返回无关。您遇到的问题是,您正在调用函数中的函数

调用函数后,调用函数的状态被推送到堆栈上。如果它随后调用另一个函数,那么状态将被推送到堆栈上。堆栈必须增长。您需要查看您的设计,以及递归是否适合您的问题

如果您不需要函数的结果,或者需要等待它返回,那么您需要递归吗

setTimeout( function(){ ..... }, 0  )

你能展示导致这个问题的代码片段吗,这样我们就可以优化它了?你的递归太多了。你没有朝着正确的方向去解决问题,这不是一个问题。我正在尝试寻找替代方案,所以我不做重构。为了扩展@AndrewBarber所说的内容,使其异步化不会改变调用堆栈的深度。因此,它无法解决根本问题。有一些技术可以手动优化尾部调用。您可能想在“蹦床”上搜索Javascript。这里的要点是您需要重构并修复您的算法。JS是单线程的,所以你不能把一段常规的JS突然变成异步的。你可以探索webWorkers,但这不会改变你的内存消耗——为此,你需要重新思考你的算法是如何工作的。让海报来决定这一点怎么样。它很可能会解决这个问题,我正在尝试想象任何一种情况下,这都会有所帮助,除非与严重的算法重构相结合。你能描述一下吗?但是我确实删除了我的downvote。setTimeout()将执行,浏览器不会等待结果。这就是被问到的问题,“是否可以在javascript中调用函数而不等待结果?”