跳至正文
首页 » 博客 » Easy JavaScript Part 2: What is the Rest Parameter in a Function?

Easy JavaScript Part 2: What is the Rest Parameter in a Function?

JavaScript函数可以采用任意数量的参数。与C # 和Java等其他语言不同,您可以在调用JavaScript函数时传递任意数量的参数。JavaScript函数允许未知数量的函数参数。在ECMAScript 6之前,JavaScript有arguments variable来访问这些未知或可变数量的参数,这是一个类似数组的对象,但不是数组。考虑下面的代码清单来理解arguments变量:

函数add(){

var结果 = 0;
对于 (i = 0;i<arguments.length;i ){
结果 = 结果参数 [i];
}
返回结果;
}

var r = add(6,9,3,2);
console.log(r);
var t = add(7,56,9);
console.log(t);

如您所见,该arguments对象用于访问未知或可变函数参数。即使arguments使用length属性和方括号,它也不是真正的JavaScript数组。您不能使用其他JavaScript数组方法,如pop,push,slice等与arguments对象。使用参数的一些问题是:

  • JavaScript函数参数对象不是真正的JavaScript数组; 因此,您不能使用其他数组方法,如pop,push,slice等。
  • 在内部函数中访问外部函数的参数对象是困难的。要使用它,您需要在变量中分配外部函数参数对象,然后在内部函数中使用它
  • 如果你想使用参数对象作为一个数组,那么你需要手动转换它使用Aarry.prototype.slice

ECMAScript 6中引入了Rest参数这一新特性,它将未知数目的参数表示为函数中的数组。它不仅将额外的参数表示为数组,还解决了arguments对象的许多问题。让我们使用rest参数重写上面的add函数。

函数add(…theArgs){

var结果 = 0;
对于 (i = 0;i <args.length;i ){
结果 = 结果args [i];
}
返回结果;
}

var r = add(6,9,3,2);
console.log(r);
var t = add(7,56,9);
console.log(t);

您可以将rest参数定义为 … args…args。如果最后一个命名的函数参数以 (三个点) 为前缀,它将成为函数的rest参数。JavaScript函数的rest参数是纯JavaScript数组。在上面的代码清单中, …theargs是函数add的rest参数,因为它是唯一命名的参数,并且它的前缀是… (三个点)。因为,rest参数是一个JavaScript数组; 您可以对rest参数执行push、pop等操作,如下面的代码清单所示:

函数add(…theArgs){

theArgs.push(10);
var结果 = 0;
对于 (i = 0;i <args.length;i ){
结果 = 结果args [i];
}
var lastItem = theArgs.pop();
console.log(lastItem);
返回结果;
}

JavaScript函数的rest参数也可以与其他参数一起使用。如果您不想在rest参数数组中包含特定参数,则可能需要在函数中使用其他命名参数。让我们考虑下一个代码列表,

函数add(num1,num2,….. theArgs){

console.log(num1);
console.log(num2);
console.log (参数长度);

}
var r = add(6,9,3,2);
var t = add(7,56,9);

对于第一次函数调用,6和9将分别分配给num1和num2。对于第二次函数调用,7和56将分配给num1和num2。从第三个参数开始的参数将分配给rest参数数组。请记住,前两个参数不会成为rest参数数组的一部分。因此,如果不是所有值都应包含在参数中,则应在开头将这些值定义为逗号分隔的命名参数。下面列出的代码会给你错误,

函数add(num1,….. theArgs,num2){

console.log(num1);
console.log(num2);
console.log (参数长度);

}

在上面的代码清单中, rest参数不是最后一个参数,所以JavaScript会抛出错误,Rest参数必须是最后一个形式参数。

JavaScript允许您破坏rest参数,这意味着您可以将rest变量数据解压缩到不同的变量名称中。让我们考虑下面的代码清单:

函数add(…[a,b,c]){

返回a b c;

}
var r = add(6);
console.log(r);
var t = add(7,56,9);
console.log(t);

对于第一次函数调用,将分配a = 6,b = undefined,c = undefined,对于第二次函数调用,将分配a = 7,b = 56,c = 9。在这种情况下,如果你传递任何额外的参数,那么这将在函数中被忽略。

JavaScript函数的rest参数比arguments对象有很大的改进,可以处理函数的未知参数。它是纯JavaScript数组; 因此,您可以使用所有数组方法。您可以将rest变量数据解压缩为命名变量。您可以为rest参数提供任何名称,这与始终使用arguments关键字相比又是一个重大改进。

在这个 “Easy JavaScript” 系列的下一篇文章中,您将了解JavaScript函数中的默认参数。您可以在ECMA国际网站上详细了解这些主题。另外,不要忘记查看可以与HTML5,Angular,React或ASP.NET MVC一起使用的Ignite UI来创建富Internet应用程序。</p