参数
ES6允许为函数的参数设置默认值
function log(x,y = 'World'){
console.log(x,y)
}
log('Hello') // Hello World
log('Hello','China') // Hello China
log('Hello','') // Hello
函数的形参是默认声明的,不能使用let
或const
再次声明
function foo(x = 5){
let x = 1;//error
const x = 2;//error
}
参数默认值可以与解构赋值的默认值结合起来使用
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就不会生成,从而报错,这里设置默认值避免
function foo({x, y = 5} = {}) {
console.log(x, y);
}
foo() // undefined 5
参数默认值应该是函数的尾参数,如果不是非尾部的参数设置默认值,实际上这个参数是没发省略的
function f(x = 1, y) {
return [x, y];
}
f() // [1, undefined]
f(2) // [2, undefined]
f(, 1) // 报错
f(undefined, 1) // [1, 1]