Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:为什么最大堆栈大小看起来是动态变化的?_Javascript_Stack Overflow - Fatal编程技术网

Javascript:为什么最大堆栈大小看起来是动态变化的?

Javascript:为什么最大堆栈大小看起来是动态变化的?,javascript,stack-overflow,Javascript,Stack Overflow,当我运行下面的函数时,我会在不同的浏览器上得到不同的结果: 函数maxCallStackSize0(){ 试一试{ 返回1+maxCallStackSize0(); }捕获(e){ 返回1; } } maxCallStackSize0();//Opera:32354,Chrome:12795这里的堆栈大小取决于多种因素 首先,当调用函数时,所有参数和返回地址都被推送到堆栈中。此外,您将在函数中定义的所有局部变量都将位于堆栈上 其次,堆栈的增长方向与堆的增长方向相反。进程为堆栈和堆使用一个内存空

当我运行下面的函数时,我会在不同的浏览器上得到不同的结果:

函数maxCallStackSize0(){ 试一试{ 返回1+maxCallStackSize0(); }捕获(e){ 返回1; } }
maxCallStackSize0();//Opera:32354,Chrome:12795这里的堆栈大小取决于多种因素

首先,当调用函数时,所有参数和返回地址都被推送到堆栈中。此外,您将在函数中定义的所有局部变量都将位于堆栈上

其次,堆栈的增长方向与堆的增长方向相反。进程为堆栈和堆使用一个内存空间。如果堆上有变量(例如,如果使用
new
实例化变量,则将在堆上而不是堆栈上创建该变量)。堆上的空间越多,堆栈的生长空间就越小


我不知道您的设置是什么样子的,但是如果浏览器选项卡中运行了其他任何东西,则会干扰堆栈大小,因为它会占用一些空间。

实际的例外情况是
RangeError:超出了最大调用堆栈大小
,是的,这取决于浏览器的特定实例的使用方式。是的,参数越多,堆栈中保留的内存就越多。相关:@raina77ow,这取决于参数的数量,而不是它们的大小,对吗?我假设堆栈将一个地址存储到堆中,在那里可以找到正确的值。你说当函数被调用时,参数和局部变量被推送到堆栈中。是实际参数,还是仅仅是对它们的引用?如果添加实际的变量,它可以很快填充堆栈!Javascript是通过引用传递的。这意味着,可以传递基本体(如数字)的实际值,但对象作为引用传递。对象本身未被传递。不过,这对填充堆栈没有任何帮助,因为对象存储在堆上,并且当堆在相同的有限内存空间内增长时,可能的堆栈大小仍然会缩小。