《JavaScript高级程序设计》在3.7.1节讲函数参数时说:
ECMAScript函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。
原因是ECMAScript中的参数在内部是用一个数组来表示的,所以可以使用arguments来访问这个参数数组。arguments是函数内部的一个特殊对象(另一个特殊对象是this)。
这种技术对于可以传递可变数量的参数的函数(非箭头函数)很有用。使用arguments.length来确定传递给函数参数的个数,然后使用arguments对象来处理每个参数。
而,一旦一个语法很灵活,就容易让新手迷糊,不知道什么是更好的写法。
ES6提供了两种更好的传参方式:rest参数和解构。
解构的写法:
let opt = {
'param1': x,
'param2': y,
'param3': z,
}
function test(opt) {
let { x, y, z } = opt;
if (x === 10) {
// do something
}
}