JavaScript可以传递任意数据类型,任意数量的参数。函数定义时要接收两个参数,调用函数时可以传递任意多个参数。这是因为JavaScript中函数的参数在内部表现为一个数组,这个数组不管包含什么也不管数组元素个数。
使用argument对象取得参数值
- 非箭头函数可以访问函数内部的argument对象
- argument对象是一个类数组对象,不是Array的实例但和数组的使用方式一样
- JavaScript的函数不存在验证命名参数的机制,也就是说在定义函数时只是为了方便阅读才写的,不是必须 要写
// 传统方式
function say (name, mess) {
console.log(name, mess) // XiaoSong hello
}
say('XiaoSong', 'hello')
// 使用arguments
// 这里说明了没有验证命名参数的机制
function say1() {
console.log(arguments[0], arguments[1])
}
say1('XiaoSong1', 'hello')
使用arguments做函数的重载
// 根据传递进来的参数个数进行不同的代码逻辑
function toAdd () {
if (arguments.length === 0) {
console.log(arguments[0] + 10)
} else if (arguments.length === 2) {
console.log(arguments[0] + arguments[1])
}
}
Note: arguments中的值和和命名参数的值会同步
arguments中的值和命名参数的值的地址是分开的
// 修改了arguments[1]的值则命名参数的值也跟着变化了
function toAdd1 (num1, num2) {
console.log(num2) // 10
arguments[1] = 20
console.log(num2) // 20
}
toAdd1(10, 10)
箭头函数中的参数
箭头函数中没有arguments,只能通过命名参数访问
let bar = () => {
console.log(arguments[0]) // arguments is not defined
}
bar(5)