在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);