1. 函数参数的默认值
ES6 允许为函数的参数设置默认值,
function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello
// 1. 参数变量是默认声明的,所以不能用 let 或 const 再次声明
function foo(x = 5) {
let x = 1; // error
const x = 2; // error
}
// 2. 使用默认值时,函数不能有同名参数
// 3. 参数默认值不是传值的,而是每次都重新计算默认值表达式的值
let x = 99;
function foo(p = x + 1) {
console.log(p);
}
foo() // 100
x = 100;
foo() // 101
2. 与结构赋值默认值结合使用
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
// 提供函数默认值
function foo({x, y = 5} = {}) {
console.log(x, y);
}
foo() // undefined 5
3. 参数默认值的位置
// 例一
function f(x = 1, y) {
return [x, y];
}
f() // [1, undefined]
f(2) // [2, undefined])
f(, 1) // 报错
f(undefined, 1) // [1, 1]
// 例二
function f(x, y = 5, z) {
return [x, y, z];
}
f() // [undefined, 5, undefined]
f(1) // [1, 5, undefined]
f(1, ,2) // 报错
f(1, undefined, 2) // [1, 5, 2]
如果传入 undefined ,将触发该参数等于默认值, null 则没有这个效果
function foo(x = 5, y = 6) {
console.log(x, y);
}
foo(undefined, null)
// 5 null
4. 函数的 length 属性 是指没有指定默认值的参数个数
5. name 属性
6. 箭头函数
7. 双冒号运算符