JavaScript 中有多少个参数过多?
How many parameters are too many in JavaScript?
我在 Whosebug 上遇到了以下问题:How many parameters are too many?
这让我想到,JS 函数的参数数量是否有实际限制?
test(65536); // okay
test(65537); // too many
function test(n) {
try {
new Function(args(n), "return 42");
alert(n + " parameters are okay.");
} catch (e) {
console.log(e);
alert(n + " parameters are too many.");
}
}
function args(n) {
var result = new Array(n);
for (var i = 0; i < n; i++)
result[i] = "x" + i;
return result.join(",");
}
事实证明,JavaScript 对函数施加了 65536 个参数的实际限制。
然而,有趣的是错误消息说限制是65535个参数:
SyntaxError: Too many parameters in function definition (only 65535 allowed)
那么,我有两个问题:
- 为什么会出现这种差异?是语言实现中的差一错误吗?
- ECMAScript 标准是否对函数参数施加了此限制?
参数长度限制为 65536
https://bugs.webkit.org/show_bug.cgi?id=80797
有不同的参数计数限制,具体取决于您的测试方式:http://mathiasbynens.be/demo/javascript-argument-count
我在 Whosebug 上遇到了以下问题:How many parameters are too many?
这让我想到,JS 函数的参数数量是否有实际限制?
test(65536); // okay
test(65537); // too many
function test(n) {
try {
new Function(args(n), "return 42");
alert(n + " parameters are okay.");
} catch (e) {
console.log(e);
alert(n + " parameters are too many.");
}
}
function args(n) {
var result = new Array(n);
for (var i = 0; i < n; i++)
result[i] = "x" + i;
return result.join(",");
}
事实证明,JavaScript 对函数施加了 65536 个参数的实际限制。
然而,有趣的是错误消息说限制是65535个参数:
SyntaxError: Too many parameters in function definition (only 65535 allowed)
那么,我有两个问题:
- 为什么会出现这种差异?是语言实现中的差一错误吗?
- ECMAScript 标准是否对函数参数施加了此限制?
参数长度限制为 65536 https://bugs.webkit.org/show_bug.cgi?id=80797
有不同的参数计数限制,具体取决于您的测试方式:http://mathiasbynens.be/demo/javascript-argument-count