ES6摘抄

1、函数可选参数function log(x, y = 'World') {} 只能作为尾参数使用,因为如果不是尾参数还是要输入的。
2、函数参数默认值与解构赋值结合使用。(注意对象冒号解构等号)
function foo({x, y = 5}) {}
一:解构要传递一个对象,如果不传递这个解构对象会报错,可以使用默认值来解决function foo({x, y = 5}={}) {}
练习:
// 写法一
function m1({x = 0, y = 0} = {}) {
return [x, y];
}

// 写法二
function m2({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
3、rest参数
function(...values){ }
arguments对象不是数组,而是一个类似数组的对象。所以为了使用数组的方法,必须使用Array.prototype.slice.call先将其转为数组。rest 参数就不存在这个问题,它就是一个真正的数组,数组特有的方法都可以使用。

4、箭头函数,一般用于匿名函数
箭头函数有几个使用注意点。
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

一般叫lambda表达式,因为可以方便地改写lambda演算
箭头函数还有一个功能,就是可以很方便地改写 λ 演算。

// λ演算的写法
fix = λf.(λx.f(λv.x(x)(v)))(λx.f(λv.x(x)(v)))

// ES6的写法
var fix = f => (x => f(v => x(x)(v)))
(x => f(v => x(x)(v)));

5、尾调用。
调用帧,调用栈。调用函数会在内存中保存“调用记录”“调用帧”保存调用位置和调用信息,但是尾调用不需要保存调用帧,节省内存,这就是尾调用的意义。但是如果尾调用函数用到了不属于函数内部的变量,仍然要记录调用帧。
尾递归。

posted on 2018-07-26 00:26  GetPower  阅读(135)  评论(0编辑  收藏  举报

导航