(函数)10.3理解参数(arguments使用)

66 阅读1分钟

JavaScript可以传递任意数据类型,任意数量的参数。函数定义时要接收两个参数,调用函数时可以传递任意多个参数。这是因为JavaScript中函数的参数在内部表现为一个数组,这个数组不管包含什么也不管数组元素个数。

使用argument对象取得参数值

  1. 非箭头函数可以访问函数内部的argument对象
  2. argument对象是一个类数组对象,不是Array的实例但和数组的使用方式一样
  3. 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)