Javascript 当一个递归函数被另一个函数调用时,它能有不同的调用堆栈限制吗?

Javascript 当一个递归函数被另一个函数调用时,它能有不同的调用堆栈限制吗?,javascript,callback,callstack,Javascript,Callback,Callstack,具有此功能 var a = function(s) { s = s+1; console.log(s); a(s); } var bz = function() { a(1) } 在我的浏览器(Mozilla Iceweasel 38.6.1)的web控制台中 如果我运行a(1),我会得到一个大约18000个结果的结果 如果我运行bz(),我会得到大约4000个不同的结果 试试看。你也一样吗?你知道为什么bz()会给出4000而不是18000个结果吗 你的代码没有什么异步的。异步的意思是,

具有此功能

var a = function(s) { s = s+1; console.log(s); a(s); }
var bz = function() { a(1) }
在我的浏览器(Mozilla Iceweasel 38.6.1)的web控制台中

  • 如果我运行a(1),我会得到一个大约18000个结果的结果
  • 如果我运行bz(),我会得到大约4000个不同的结果

试试看。你也一样吗?你知道为什么bz()会给出4000而不是18000个结果吗

你的代码没有什么异步的。异步的意思是,在最简单的情况下,某个东西向作业队列中添加了一个新作业。调用堆栈与作业队列无关。劳伦特:但我总是听说javascript是单线程的。。。这听起来很奇怪,我告诉每个线程。。。你能解释一下吗?很抱歉,这可能是基本的,链接是很好的,因为你可以通过Web Workers获得类似于线程的东西。我不知道它们是如何工作的,我自己也从未使用过。但有一点是肯定的:如果你不明确地提出其他要求,一切都将是有序的。我认为这些评论是有主题的,所以关于JavaScript和“线程”以及“WebWorkers”,在web和stackoverflow上有很多解释。如果这些都不能提供所需的答案,请提问。关于您的问题,我相信这与浏览器的JavaScript实现和最大调用堆栈大小有关,请参见。我不确定冰鼬是如何工作和优化的。这些数字是为您确定的还是取决于您的可用内存?您的代码没有异步。异步意味着,在最简单的情况下,某个东西会将新作业添加到作业队列中。调用堆栈与作业队列无关。劳伦特:但我总是听说javascript是单线程的。。。这听起来很奇怪,我告诉每个线程。。。你能解释一下吗?很抱歉,这可能是基本的,链接是很好的,因为你可以通过Web Workers获得类似于线程的东西。我不知道它们是如何工作的,我自己也从未使用过。但有一点是肯定的:如果你不明确地提出其他要求,一切都将是有序的。我认为这些评论是有主题的,所以关于JavaScript和“线程”以及“WebWorkers”,在web和stackoverflow上有很多解释。如果这些都不能提供所需的答案,请提问。关于您的问题,我相信这与浏览器的JavaScript实现和最大调用堆栈大小有关,请参见。我不确定冰鼬是如何工作和优化的。这些数字是为您确定的还是取决于您的可用内存?