1、函数参数默认值【详情例子参照ESMAScript 6入门 (阮一峰)

  • 允许为函数的参数设置默认值,即直接写在参数定义的后面。【例子1】
  • 参数变量是默认声明的,所以不能用letconst再次声明。【例子2】
  • 参数默认值不是传值的,而是每次都重新计算默认值表达式的值。(惰性求值)【例子3】

2、函数的length属性

  • 指定了默认值后,length属性将失真。【因为length属性的含义是,该函数预期传入的参数个数。】

3、rest参数【...变量名】,用于获取函数的多余参数

注意:rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。

     函数的length属性,不包括 rest 参数。

求和

function add(...values) {
let sum = 0;
for (var val of values) {
sum += val;
}
return sum;
}
add(2, 5, 3) // 10 

利用rest参数改写数组push方法

function push(array, ...items) {
items.forEach(function(item) {
array.push(item);
console.log(item);
});
} var a = [];
push(a, 1, 2, 3)

4、箭头函数

  • 不绑定this【箭头函数的this是固定的】、arguments
  • 不可使用new命令和yield命令
  • 箭头函数导致this总是指向函数定义生效时所在的对象
var f = () => 5;/
// 等同于 var f = function () { return 5 };
//有参数
var sum = (num1, num2) => { return num1 + num2; }

实例:

// 正常函数写法
[1,2,3].map(function (x) {
return x * x;
}); // 箭头函数写法
[1,2,3].map(x => x * x);

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

只需要知道循环可以用递归代替,而一旦使用递归,就最好使用尾递归。

//旧的
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 sum(x, y) {
if (y > 0) {
return sum(x + 1, y - 1);
} else {
return x;
}
} sum(1, 10)
//11 /* 尾递归优化 */
function trampoline(f) {
while (f && f instanceof Function) {
f = f();
}
return f;
}
function sum(x, y) {
if (y > 0) {
return sum.bind(null, x + 1, y - 1);
} else {
return x;
}
}
trampoline(sum(1, 100000))
//100001

  

以上ES6均参考ESMAScript 6入门 (阮一峰),仅仅当作自己的笔记而已。

最新文章

  1. 理解 Node.js 里的 process.nextTick()
  2. iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示
  3. Centos6.5里安装Hbase(伪分布式)
  4. iOS 中捕获程序崩溃日志
  5. caffe的python接口
  6. Codeforces 723d [暴力dfs]
  7. C语言文法定义及C程序的推导过程
  8. Embedded binary is not signed with the same certificate as the parent app
  9. net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
  10. sqlserver客户端连接只显示特定数据库的配置方法
  11. json 解析解乱码
  12. html5 “拖放”
  13. NHibernate联合主键详细示例
  14. mysql近几天的查询
  15. PCI和PCIE插槽有什么区别?
  16. java.lang.Boolean 类源码解析
  17. django安装及简单使用
  18. Unable to find CMake in android studio
  19. MySql 数据库安装、环境变量配置 以及 本地连接
  20. IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520

热门文章

  1. 【Stream—6】BufferedStream相关知识分享
  2. Hadoop简述
  3. Fortran文件读写--查找内容
  4. Aso.Net Core 的配置系统Configuration
  5. Selenium+Java(六)Selenium 强制等待、显式等待、隐实等待
  6. Android Saripaar 注解详解
  7. 关于JMeter原子性相关探究
  8. 《软件安装》centos 安装 mysql
  9. 分布式存储Minio集群环境搭建
  10. Linux安装图像页面的命令