函数参数参数对象休息和传播参数

函数可以以变量的形式获取输入,这些变量可以在其自己的范围内使用和分配。以下函数接受两个数值并返回它们的总和:

function addition (argument1, argument2){
    return argument1 + argument2; 
}

console.log(addition(2, 3)); // -> 5

arguments 对象

arguments 对象包含所有包含非默认值的函数参数。即使未显式声明参数,也可以使用它:

(function() { console.log(arguments) })(0,'str', [2,{3}]) // -> [0, "str", Array[2]]

虽然在打印 arguments 时输出类似于一个数组,但它实际上是一个对象:

(function() { console.log(typeof arguments) })(); // -> object

休息参数:function (...parm) {}

在 ES6 中,当在函数参数的声明中使用时,... 语法将变量向右转换为包含在声明的参数之后提供的所有剩余参数的单个对象。这允许使用无限数量的参数调用函数,这些参数将成为此变量的一部分:

(function(a, ...b){console.log(typeof b+': '+b[0]+b[1]+b[2]) })(0,1,'2',[3],{i:4});
// -> object: 123  

传播参数:function_name(...varb);

在 ES6 中,通过在右侧放置一个对象/变量来调用函数时,也可以使用 ... 语法。这允许将对象的元素作为单个对象传递给该函数:

let nums = [2,42,-1];
console.log(...['a','b','c'], Math.max(...nums)); // -> a b c 42