函数的默认参数[解构赋值]

ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法
function log(x, y) {
y = y || ‘World’;
console.log(x, y);
}
log(‘Hello’) // Hello World
log(‘Hello’, ‘China’) // Hello China
log(‘Hello’, ‘’) // Hello World

如果参数 y 赋值了,但是对应的布尔值为 false,则该赋值不起作用,参数 y 等于空字符,结果被改为
默认值
改进:
if (y === ‘undefined’) {
y = ‘World’;
}
ES6 写法:
function log(x, y = ‘World’) {
console.log(x, y);
}
log(‘Hello’) // Hello World
log(‘Hello’, ‘China’) // Hello China
log(‘Hello’, ‘’) // Hello
function Point(x = 0, y = 0) {
this.x = x; this.y = y;
}
const p = new Point();
console.log§ // { x: 0, y: 0 }
注意事项:
1.参数变量是默认声明的,所以不能用 let 或 const 再次声明。
function foo(x = 5) {
let x = 1; // error
const x = 2; // error
}
//参数变量 x 是默认声明的,在函数体中,不能用 let 或 const 再次声明,否则会报错。
2.使用参数默认值时,函数不能有同名参数。
// 不报错
function foo(x, x, y) {
// …
}
// 报错
function foo(x, x, y = 1) {
// …
}
// SyntaxError: Duplicate parameter name not allowed in this context
3.参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。
let x = 99;
function foo(p = x + 1) {
console.log§;
}
foo() // 100
x = 100;
foo() // 101
函数默认参数的用法:
1.与解构赋值默认值结合使用
A.
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
B.function fetch(url, { body = ’ ', method = ‘GET’, headers = {} }) {
console.log(method);
}
fetch(‘http://example.com’, {}) // “GET”
fetch(‘http://example.com’) // 报错 不能省略第二个参数
改进措施:如果结合函数参数的默认值,就可以省略第二个参数
function fetch(url, { body = ‘’, method = ‘GET’, headers = {} } = {}) {
console.log(method);
}
fetch(‘http://example.com’) // “GET”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值