JavaScript函数可以接受的参数数量上限吗?
我知道JavaScript函数可以接受“任意”数量的参数。
function f(){};f(1,2,3,4 /*...*/);
但是我想知道实际上有多少个“任何”个数是否有限制?
例如,假设我向提出了一百万个论点f()
。那行得通吗?还是口译员会翻身?
我猜测最大值是(a)特定于实现的(b)(2^32)-1
,因为arguments
对象是类似数组的。
我在语言规范中没有看到这一点,但是可能没有连接点。
回答:
尽管没有具体限制规范中参数的理论最大数目这些限制是完全依赖于实现的,最有可能,也将取决于究竟在 如何 你调用的函数。
我创建了
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:最近一次成功的测试是 变量。之后,它失败并显示:
未捕获的RangeError:超出最大调用堆栈大小
- Firefox 27.0.1:最近一次成功的测试是 参数。之后,它失败并显示:
RangeError:传递给Function.prototype.apply的arguments数组太大
- Internet Explorer 11:上一次成功的测试是 变量。之后,它失败并显示:
RangeError:SCRIPT28:堆栈空间不足
- Opera 12.17:最近一次成功的测试是 变量。之后,它失败并显示:
错误:Function.prototype.apply:argArray太大
当然,这里可能还有其他因素,您可能会有不同的结果。
这是使用创建的替代jsfiddleeval
。同样,您可能会得到不同的结果。
- Chrome 33.0.1750.154 m:最近一次成功的测试是 参数。之后,它失败并显示:
未捕获的SyntaxError:函数调用中的参数过多(仅允许32766)
这一点特别有趣,因为Chrome本身似乎对实际上允许多少个参数感到困惑。
- Firefox 27.0.1:最近一次成功的测试是 参数。之后,它失败并显示:
脚本太大
- Internet Explorer 11:上一次成功的测试是 参数。之后,它失败并显示:
RangeError:SCRIPT7:内存不足
- Opera 12.17:最近一次成功的测试是 变量。之后,它失败并显示:
内存不足; 脚本已终止。
以上是 JavaScript函数可以接受的参数数量上限吗? 的全部内容, 来源链接: utcz.com/qa/429841.html