携手创作,共同成长!这是我参与「掘金日新计划 · 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也是作为尾参数出现
参数变量是默认声明的,所以不能用let或const再次声明。
使用参数默认值时,函数不能有同名参数。
// 不报错
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()的参数是一个对象时,变量x和y才会通过解构赋值生成。如果函数foo()调用时没提供参数,变量x和y就不会生成,从而报错。通过提供函数参数的默认值,就可以避免这种情况。