rest 参数与 arguments 对象的区别:
1)rest 参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
2)arguments对象不是一个真正的数组,而 rest 参数是真正的 Array 实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sort、map、forEach、pop
3)arguments对象还有一些附加的属性 (如callee属性)
arguments 对象
arguments 对象是所有非箭头函数中的函数内部变量(arguments 对象并不是在 ES6 中提出的)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</style>
</style>
</head>
<body>
<script>
function fn() {
console.log(arguments);
for (var i=0; i<arguments.length; i++) {
console.log(arguments[i]);
}
}
// Arguments(5) [1, 3, 5, 7, 9, callee: ƒ, Symbol(Symbol.iterator): ƒ]
// 1
// 3
// 5
// 7
// 9
fn(1,3,5,7,9);
</script>
</body>
</html>
rest 参数
rest 参数又叫剩余参数。它允许我们将一个或多个不定数量的实参表示为一个数组。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</style>
</style>
</head>
<body>
<script>
function fn(...args) {
console.log(args);
}
// (5) [1, 3, 5, 7, 9]
fn(1,3,5,7,9);
function f(a, b, ...args) {
console.log(args);
}
// (3) [5, 7, 9]
f(1,3,5,7,9);
// []
f(1,3);
</script>
</body>
</html>