ES6函数参数的默认值

444 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天juejin.cn/post/712312…

1、给函数参数设置默认值,必须把该形参放置在尾参数,要不然就把该形参对应的实参设置成undefined,因为在ES6里面规定了,有默认值的必须是undefined传过去。

2、Length属性

Reset如果你不知道函数里面传了几个实参,这时候就不知道该用几个形参来接收,以前不写形参,用arguments接收,以数组方式进行读取。

Function test(…argu){

Console.log(argu)//它是真的数组   arguments是伪数组

}

Test(“tom”,”lily”,”xiaoming”)

Reset也是作为尾参数出现

参数变量是默认声明的,所以不能用letconst再次声明。 使用参数默认值时,函数不能有同名参数。

// 不报错
function foo(x, x, y) {
  // ...
}

// 报错
function foo(x, x, y = 1) {
  // ...
}
// SyntaxError: Duplicate parameter name not allowed in this context

另外,一个容易忽略的地方是,参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。

let x = 99;
function foo(p = x + 1) {
  console.log(p);
}

foo() // 100

x = 100;
foo() // 101

上面代码中,参数p的默认值是x + 1。这时,每次调用函数foo(),都会重新计算x + 1,而不是默认p等于 100。

与解构赋值默认值结合使用

参数默认值可以与解构赋值的默认值,结合起来使用。

function foo({x, y = 5}) {
  console.log(x, y);
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // TypeError: Cannot read property 'x' of undefined

上面代码只使用了对象的解构赋值默认值,没有使用函数参数的默认值。只有当函数foo()的参数是一个对象时,变量xy才会通过解构赋值生成。如果函数foo()调用时没提供参数,变量xy就不会生成,从而报错。通过提供函数参数的默认值,就可以避免这种情况。