在Javascript中,如果我在函数中提供的参数多于所需的参数,会发生什么情况?

在Javascript中,如果我在函数中提供的参数多于所需的参数,会发生什么情况?,javascript,Javascript,假设- function noname(a, b) { //code } 我给- noname(4,5,6,7); 接下来会发生什么?附加参数将被忽略 但是,它们将作为参数伪数组的一部分提供,例如作为参数[2],参数[3] 如果您提供的变量少于所需的变量,那么缺少的变量将是未定义的,正如Alnitak所说,它们将成为未定义的,因为它们没有任何约束,除非如前所述:参数[i]被使用 一个好的做法是首先使用所有函数上可用的.length方法测试函数声明了多少原始参数 noname.length==

假设-

function noname(a, b) {
//code
}
我给-

noname(4,5,6,7);

接下来会发生什么?

附加参数将被忽略

但是,它们将作为
参数
伪数组的一部分提供,例如作为
参数[2]
参数[3]


如果您提供的变量少于所需的变量,那么缺少的变量将是
未定义的

,正如Alnitak所说,它们将成为
未定义的
,因为它们没有任何约束,除非如前所述:
参数[i]
被使用

一个好的做法是首先使用所有函数上可用的
.length
方法测试函数声明了多少原始参数

noname.length==2//在您的情况下

这样可以更容易地保存任何附加参数(以防我们可能需要使用它们)

函数noname(a,b){
log('此函数中的原始参数:'+noname.length);
var附加参数=[];
if(arguments.length>noname.length){
对于(i=0;i

注意:声明的参数对调用函数的方式没有影响-您甚至可以不使用任何参数来调用它。这里有更多信息,当数组中的项通常多于函数时,
sort
如何工作?这是数组上的一个例外吗?
sort
是数组的一种方法-数组到达
this
变量并直接进行操作。它不是作为参数传递的。我不会说这是一个特别好的实践,因为许多函数不公开
.length
。在任何情况下,我都会使用
var-additional=[].prototype.slice.call(arguments、arguments.callee.length)
而不是那个冗长(而且效率极低)的循环。
function noname (a, b) {
    console.log('Original parameters in this function: ' + noname.length);

    var additionalParameters = [];

    if (arguments.length > noname.length) {
        for (i = 0; i < arguments.length - noname.length; i++) {
            // We need to start arguments off at index: 2 in our case
            // The first 0 & 1 parameters are a, b

            additionalParameters[i] = arguments[i + noname.length];
            // These of course will be saved starting at 0 index on additionalParameters
        }
    }

    console.log(additionalParameters);
}

noname(1, 2, 3, 4, 5);