es6学习-函数扩展

函数的扩展

函数参数的默认值

基本用法

ES6提供了函数的指定默认值的写法,例子如下

function Point(x = 0, y = 0) {
   
  this.x = x;
  this.y = y;
}

const p = new Point();
p // { x: 0, y: 0 }

优点:①读代码的人容易知道哪些参数可以省略。②以后代码优化,把这参数去掉也不会导致代码无法运行。

有几个注意点

①参数是默认声明,不能使用letconst再次声明

function foo(x = 5) {
   
  let x = 1; // error
  const x = 2; // error
}

②函数参数不能有同名参数

// 不报错
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

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

参数默认值可以与解构赋值结合起来使用,实现参数的自动赋值以及对一些配置项进行省略。

例子如下

// 写法一
function m1({
   x = 0, y = 0} = {
   }) {
   
  return [x, y];
}

// 写法二
function m2({
   x, y} = {
    x: 0, y: 0 }) {
   
  return [x, y];
}

第一种写法由于第二种,因为第一种写法当传过来的参数为undefined时,参数是有值的,而第二种参数是无值的,因为当有参数传过来的时候,就不会使用默认值。

参数默认值的位置

有默认值的参数一般都是放在函数参数的尾部,因为这样比较容易看出来,哪些参数是可以省略的,而如果设置了默认值的参数不再尾部的话,这个参数其实是不能省略的。

例子

// 例一
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() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值