ES6——Function扩展

来源:互联网 发布:如何优化企业资本结构 编辑:程序博客网 时间:2024/06/07 14:25

参数默认值


实例

function test(x, y='World'){    console.log(x,y);}test('Hello');  // Hello World

注意

默认值后面不能再跟参数,例如c。除非这个参数也是有默认值的。



rest函数

一个函数的最后一个参数有“…”的前缀

把一组不确定长度的参数,转换为数组


实例

function test3(...arg){    for(let v of arg){        console.log(v); // 1,2,3,4,'a'    }    console.log(arg); //[1,2,3,4,'a']}test3(1,2,3,4,'a');



扩展运算符

与rest作用正好相反,把数组解构成参数

console.log(...[1,2,3]);    // 1 2 3



箭头函数


语法

函数名 =   参数  => 返回值函数名 =   参数  => { 返回值 }


实例

let arrow = v => v*2;console.log(arrow(3)); // 6


箭头函数中的this


在ES6中有两种this,一种是原有的动态绑定的this,另一种this在定义的时候就确定了。

箭头函数属于后一种,也就是通过作用域链寻找this。



尾调用

函数的最后一步操作,是一个函数。


实例

function tail(x){    console.log('tail',x);}function fx(x){    return tail(x);    //函数的最后一句话是函数,这种情况叫做尾调用。}fx(123);



尾递归

尾调用自身,就称做尾递归。

递归非常耗费内存,因为需要同时保存成千上百个调用帧,

但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。


实例


定义一个阶乘函数

function sum(n,total){    if (n === 1){        return total;    }    return sum(n - 1, n * total);}


尾递归改写


尾递归有2个参数,看上去不容易辨别是做什么运算。

为了让它看起来容易理解,我们可以使用函数默认值的方式。

function sum(n,total = 1){    if (n === 1){        return total;    }    return sum(n - 1, n * total);}
原创粉丝点击