为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2019-08-02 17:17:46
JavaScript函数可以接受最大数量的参数吗?我知道JavaScript函数可以接受“任意”数量的参数。function f(){};f(1,2,3,4 /*...*/);但我想知道实际上有多少“任何”可以限制?比如说,让我说一百万个参数f()。那会有用吗?或者翻译龙骨?我猜测最大值是(a)特定于实现或(b)(2^32)-1,因为arguments对象是类似数组的。我没有在语言规范中看到这一点,但我可能没有连接一些点。
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

虽然没有具体限制规范中理论最大数量的论点(正如的回答所 指出的那样)。当然有实际限制。这些限制完全取决于实现,很可能也取决于您如何调用该函数。


我创造了这个小提琴作为实验。

function testArgs() {
    console.log(arguments.length);}var argLen = 0;for (var i = 1; i < 32; i++) {
    argLen = (argLen << 1) + 1;
    testArgs.apply(null, new 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个参数。之后它失败了:

    内存不足; 脚本已终止。


查看完整回答
反对 回复 2019-08-02
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

根据ECMA Script 5.1标准规范List

List类型用于解释新表达式,函数调用以及需要简单值列表的其他算法中的参数列表(参见11.2.4)的评估。List类型的值只是有序的值序列。这些序列可以是任何长度。

因此,标准对参数的数量没有任何限制,仅受内存的限制。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 1105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号