ES6 函数扩展

函数的扩展

函数参数的默认值

现在允许为函数的参数设置默认值,即直接写在参数定义的后面。

function add(a,b = 2){
  console.log(a + b)
}
add(1) // 3
add(1,1) // 2
add(1,'') // '1'
与解构赋值默认值结合使用

解构的相关规则在函数参数中都是成立的。对象解构要注意本质的东西,是键还是名。

// 写法一
function func1({a = 0, b = 0} = {}) {
  return [a, b];
}

// 写法二
function func2({a, b} = { a: 0, b: 0 }) {
  return [a, b];
}

func1() // [0,0]
func2() // [0,0]

func1({a: 2, b: 4}) // [2, 4]
func2({a: 2, b: 4}) // [2, 4]

func1({a: 2}) // [2, 0]
func2({a: 2}) // [2, undefined]

func1({b: 4}) // [0, 4]
func2({b: 4}) // [undefined, 4]

func1({}) // [0, 0]
func2({}) // [undefined, undefined]

func1({c:1}) // [0, 0]
func2({c:1}) // [undefined, undefined]
函数的 length 属性

函数的length属性,将返回没有指定默认值的参数个数,但指定默认值后,length属性将失真,也不包括 rest 参数(…param)。

(function (x) {}).length // 1
(function (x = 5) {}).length // 0
(function (x, y, z = 5) {}).length // 2

rest 参数

rest 参数(形式为...变量名),用于获取函数的多余参数,该变量将多余的参数放入数组中。

function add(...number) {
  let sum = 0;

  for (var val of number) {
    sum += val;
  }

  return sum;
}

add(1, 5, 1) // 7

rest 参数之后不能再有其他参数

function f(a,...b,c){} //

name 属性

返回该函数的函数名

function func(){}
func.name // "func"

箭头函数

使用"箭头" => 来定义函数;this 的指向问题是需要去注意的点

var func = p => p ;
// 等同于
var func = function(p){
  return p;
}

var add = (num1, num2) => num1 + num2;
// 等同于
var add = function(num1, num2) {
  return num1 + num2;
};
// 等同于
var sum = (num1, num2) => { return num1 + num2;}
使用注意
  • 箭头函数没有自己的this对象
  • 不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,否则会抛出一个错误。
  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
  • 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
不适用场合

第一个场合是定义对象的方法,不合适

const obj = {
  number: 9,
  func1:()=>{
    this.number ++;
  }
}

第二个场合是需要动态this的时候,不合适

var button = document.getElementById('btn');
button.addEventListener('click', () => {
  this.classList.toggle('on');
});
// button的监听函数是一个箭头函数,导致里面的this就是全局对象。如果改成普通函数,this就会动态指向被点击的按钮对象。
嵌套的箭头函数
const func =  ()=>{
  ...
  return  ()=>{
    ...
    return ()=>{
      ...
      return value
    }
  }
}

λ演算

let fun = f =>(x=>f(v=> x(x)(v)))(x=> f(v=> x(x)(v)))
尾调用(Tail Call)

指某个函数的最后一步是调用另一个函数

function fun(){
  let a = 1 ;
  let b = 2 ;
  let c = a + b;
  return f(c);
}
尾递归

函数调用自身,称为递归。如果尾调用自身,就称为尾递归。

function fun(num){
	if( num < 1 ) return true;
  return n * fun(num - 1);
}
fun(10) // 3628800

参考文献

阮一峰老师的 ECMAScript 6 入门


点赞 评论 收藏 ~~ 今天的学习记录暂时到这...... ~~ 点赞 评论 收藏
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shaoin_2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值