JavaScript中参数过多的数量是多少?

6
我在StackOverflow上看到了以下问题:有太多参数会导致什么问题? 这让我思考,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)

所以,我有两个问题:

  1. 为什么会有这种差异?是语言实现中的一位错误吗?
  2. ECMAScript标准是否对函数参数数量有限制?

2
它取决于运行JavaScript的VM https://dev59.com/U2Eh5IYBdhLWcg3wKQnY - Noctisdark
虽然这里并没有太大的影响,但是该测试存在缺陷,因为它还受到数组支持的最大元素数量的限制。 - Felix Kling
@Noctisdark:不确定你想告诉我什么。 - Felix Kling
@FelixKling 可能 4.29 十亿个元素相当多。 - Aadit M Shah
@Noctisdark:这就是我说“在这里并没有太大的区别”的原因。也许我应该在我的评论中加上“理论上”之类的词语。关键是这个测试正在测试两件事情,而不是一件。 - Felix Kling
显示剩余5条评论
1个回答

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接