猿问

JavaScript函数可以接受最大数量的参数吗?

JavaScript函数可以接受最大数量的参数吗?

我知道JavaScript函数可以接受“任意”数量的参数。

function f(){};f(1,2,3,4 /*...*/);

但我想知道实际上有多少“任何”可以限制?

比如说,让我说一百万个参数f()。那会有用吗?或者翻译龙骨?

我猜测最大值是(a)特定于实现或(b)(2^32)-1,因为arguments对象是类似数组的。

我没有在语言规范中看到这一点,但我可能没有连接一些点。


婷婷同学_
浏览 1106回答 3
3回答

POPMUISE

虽然没有具体限制规范中理论最大数量的论点(正如她的回答所&nbsp;指出的那样)。当然有实际限制。这些限制完全取决于实现,很可能也取决于您如何调用该函数。我创造了这个小提琴作为实验。function&nbsp;testArgs()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;console.log(arguments.length);}var&nbsp;argLen&nbsp;=&nbsp;0;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;<&nbsp;32;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;argLen&nbsp;=&nbsp;(argLen&nbsp;<<&nbsp;1)&nbsp;+&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;testArgs.apply(null,&nbsp;new&nbsp;Array(argLen));}这是我的结果:Chrome 33.0.1750.154 m:最后一次成功的测试是65535个参数。之后它失败了:未捕获RangeError:超出最大调用堆栈大小Firefox 27.0.1:最后一次成功的测试是262143个参数。之后它失败了:RangeError:传递给Function.prototype.apply的arguments数组太大Internet Explorer 11:最后一次成功的测试是131071个参数。之后它失败了:RangeError:SCRIPT28:堆栈空间不足Opera 12.17:最后一次成功的测试是1048576个参数。之后它失败了:错误:Function.prototype.apply:argArray太大了当然,这里可能还有其他因素可能会有不同的结果。这是一个使用的替代小提琴eval。同样,您可能会得到不同的结果。Chrome 33.0.1750.154 m:最后一次成功的测试是32767个参数。之后它失败了:Uncaught SyntaxError:函数调用中的参数太多(仅允许32766)这一点特别有趣,因为Chrome本身似乎对实际允许的参数数量感到困惑。Firefox 27.0.1:最后一次成功的测试是32767个参数。之后它失败了:脚本太大了Internet Explorer 11:最后一次成功的测试是32767个参数。之后它失败了:RangeError:SCRIPT7:内存不足Opera 12.17:最后一次成功的测试是4194303个参数。之后它失败了:内存不足;&nbsp;脚本已终止。

一只萌萌小番薯

根据ECMA Script 5.1标准规范List,List类型用于解释新表达式,函数调用以及需要简单值列表的其他算法中的参数列表(参见11.2.4)的评估。List类型的值只是有序的值序列。这些序列可以是任何长度。因此,标准对参数的数量没有任何限制,仅受内存的限制。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答