ES6函数扩展
来源:互联网 发布:深圳岂凡网络 林秋敏 编辑:程序博客网 时间:2024/09/21 06:36
函数参数的默认值:
在ES5中,我们想给函数一个默认值,需要这样写:
function add (x, y) { y = y || 'ss'; console.log(x, y);}
在ES6中 ,可以这样写:
function add (x, y = 'ss'){ console.log(x, y) }add('dd') // ddssadd('ss','dd') //ssddadd('dd','') //dd
我们只需要在参数上直接写上我们想要的默认值就好了。
当我们给函数一个变量的时候,就声明了一个变量,我们在函数内部就不可以在用let或const进行声明:
function add (x, y = 'aa'){ let y = dd;
这样的写法是es6不允许的。
解构赋值函数参数
我们可以解构赋值的给函数传入参数:
function add([x, y]){ return x + y;}add([1, 2]); // 3
在前面的解构赋值中还有一些例子可以参考。
rest参数
es6中增加了rest参数,其形式为:… 变量名
也就是说在我们不知道参数个数的情况下,就可以使用这种方法:
function add(...values){ let sum = 0; for(var val of values){ sum += val; } return sum;}add(2,5,3);
需要注意的是,rest参数一定是最后一个参数:
function (a ,...value ,b){ //会报错 }
扩展运算符
使用方法为:…
console.log(...[1, 2, 3, 4]);// 1, 2, 3, 4
扩展运算符可以用来进行数组的合并:
var arr1 = [1, 2]var arr2 = [3, 4]var arr3 = [5, 6]var arr4 = [...arr1,...arr2,...arr3]//arr4 = [1, 2, 3, 4, 5, 6]
const [a,...arr] = [1, 2, 3, 4, 5, 6];//a = 1 arr = [2, 3, 4, 5, 6]
[...'hello']//['h','e','l','l','o']
箭头函数
es6新增了函数的写法,箭头函数,下面是箭头函数的基本写法:
const a = y => y
等同于:
const a = function (y){ return y;}
如果不需要参数,就这样写:
cosnt a = () => y;
如果箭头函数的代码块多与一行,我们就用大括号包起来:
const a = (a, b) => {return a + b};
如想返回一个对象,需要用圆括号包起来:
cosnt a = id =>({id : iii,name : li});
箭头函数的this是固定的,就指向函数定义是的作用域,不会改变。
尾调函数
尾调函数就是某个函数在最后一步调用另一个函数。
function a (){ return b():}
这就是一个最简单的尾调函数。
那么为什么要有尾递归这个方法出现那,我在网上看了半天,发现到最后总结起来就是一句话:”显得高端”。
其实解释就是,因为函数调用函数,会生成调用帧,这样就会占用一些内存空间,如果我们采用尾调用的方法,就可以避免这个问题出现。
尾递归
函数在函数内部调用自己,叫做递归,函数在尾部调用自己,就是尾递归,由于上面的原因,尾递归可以大大的减少对内存的占用,是代码的执行效率更高。
下面是两个例子:
function factorial(n) { if (n === 1) return 1; return n * factorial(n - 1); } factorial(5) // 120
这个是正常的递归调用,我们给他改为尾递归:
function factorial(n, total) { if (n === 1) return total; return factorial(n - 1, n * total); } factorial(5, 1) // 120
他们俩个的区别就是,一个是将自身用于计算;一个返回了自身,将计算的步骤放在了参数里。
还有一个著名的算法,斐波纳西数列:
正常的话是这样写:
function Fibonacci (n) { if ( n <= 1 ) {return 1}; return Fibonacci(n - 1) + Fibonacci(n - 2); }
运用尾递归就要这样写:
function Fibonacci2 (n , ac1 = 1 , ac2 = 1) { if( n <= 1 ) {return ac2}; return Fibonacci2 (n - 1, ac2, ac1 + ac2); }
是不是觉得代码难理解了,尾递归的优化写法有好多,但是我发现只有es6的写法是最简单易懂的,因为es6提供了默认的参数值:
function factorial(n, total = 1) { if (n === 1) return total; return factorial(n - 1, n * total); }
这个与上面的第一个例子一样,计算一个数的阶乘。
- ES6--函数扩展
- es6函数的扩展
- ES6 函数扩展
- ES6-函数的扩展
- 08、ES6 函数扩展
- ES6函数扩展
- ES6 函数扩展
- js-es6-函数扩展
- ES6--函数的扩展
- ES6函数扩展
- ES6函数扩展
- ES6--对象、函数的扩展
- ES6(七) 函数的扩展
- es6函数扩展(六)
- ES6中函数的扩展
- es6之函数的扩展
- ES6-函数的扩展-箭头函数
- ES6入门(数组扩展,函数扩展,对象扩展,Symbol,数据结构)
- QQ空间相册密码破解2018-破解QQ空间访问权限2018
- P4,C开发笔试题三道
- [堆]51 Nod 1461——稳定桌
- 链表的增删改查
- 面试题总结
- ES6函数扩展
- 二周三次课(10月25日)
- Linux常用网络命令
- js模拟点击a标签,触发href
- error: insufficient permissions for device: verify udev rules
- Jenkins忘记账号密码
- 调用时编译器的优化问题
- 详细bitbucket入门手册,手把手操作指南
- Java并发之定时任务接口ScheduledExecutorService