ES6对于函数的使用新增了很多实用的API,JS的函数跟很多后台语言PHP,ASP.NET开始看齐:

1. 参数默认值:

以前我们为了给函数创建默认值,必须用一种冗杂的语句,而且有歧义的语句。

//ES5
function myTest(name){
  name = name || "default";
console.log(name);
}
//ES6
function myTest(name = "default"){
console.log(name);
}

在ES5中,如果name传入了布尔值false将会产生歧义,而且也不直观,ES6的语法明显简洁很多。

参数默认值通常写在尾部,以便可以省略赋值。

2. reset参数

reset参数是ES6中用于代替arguments对象的一个方法,arguments是类数组,不完全是数组,无法使用sort,slice等方法,而reset是真正的数组:

//ES5
function sortArray(){
var args = Array.prototype.slice.call(arguments);
args.sort();
}
//ES6
function sortArray(...args){
args.sort();
}

args同样也只能放在末尾

function print(name,city,...others){
var str = name + city;
for(var item of others){
str += item;
}
}
print("mic","shenzhen","male","married");

3. name属性

函数具有name属性返回函数名

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

4. 箭头函数

箭头函数是ES6中简化函数代码的一个重要特性,可以简化代码

//es5
function myFunc(){
console.log("hello");
}
function myFunc(name){
console.log(name);
}
function add2(num){
return num+2;
}
function add2(num1,num2){
  return num1+num2;
}
function myFunc(){
return {
res:true,
msg:""
}
} //es6
()=>console.log("hello"); name=>console.log(name); num=>num+2; (num1,num2)=>num1+num2; ()=>({res:true,msg:""})//返回对象需要括号括起来

在forEach场景比较常见,明显简洁很多:

//es5
var list = [1,2,3,4,5,6]; list.forEach(function(num){
return num + 1;
}); //es6
let list = [1,2,3,4,5,6];
list.forEach(num=>num+1);

箭头函数有一些特点:

(1) 本身没有this对象,引用this对象是指定义箭头函数的对象


//es5
{
addAll:function(pieces) {
var self = this;
pieces.forEach(function(piece){
self.add(piece);
});
},
}
//es6
{
addAll(pieces){
piece.forEach(piece=>this.add(piece));
}
}

有何不同,ES5中forEach函数的this对象默认不是外层函数的this对象,所以需要用一个变量来引用,而箭头函数里面this指的就是定义箭头函数的对象,所以就是当前对象。

(2) 不能作为构造函数

(3) 没有arguments对象,可以用rest替代

(4) 不能作为Generator函数

ES6介绍二 函数的增强的更多相关文章

  1. ES6里关于函数的拓展(二)

    一.构造函数 Function构造函数是JS语法中很少被用到的一部分,通常我们用它来动态创建新的函数.这种构造函数接受字符串形式的参数,分别为函数参数及函数体 var add = new Functi ...

  2. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  3. ES6学习一 JS语言增强篇

    一 背景 JavaScript经过二十来年年的发展,由最初简单的交互脚本语言,发展到今天的富客户端交互,后端服务器处理,跨平台(Native),以及小程序等等的应用.JS的角色越来越重要,处理场景越来 ...

  4. vue框架入门和ES6介绍

    vue框架入门和ES6介绍 vue-mvvm模式,vue是一种轻量级的前端框架,主要为模板渲染,数据同步,组件化,模块化,路由等. https://cn.vuejs.org/ 源码:https://g ...

  5. 《前端之路》- TypeScript(二) 函数篇

    目录 一.定义函数方法 二.定义函数传参 三.可选传参 四.默认传参 五.传递剩余参数 六.函数重载 七.箭头函数 八.总结 一.定义函数方法 在 es5 中定时函数的方法有 命名函数和函数表达式(匿 ...

  6. React和ES6(二)ES6的类和ES7的property initializer

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  7. ES6 入门系列 - 函数的扩展

    1函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log( ...

  8. ES6笔记② 箭头函数

    特性介绍 箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. //ES5 function fun(x,y){ return x+y; } console.log(fun ...

  9. Lucene.Net 2.3.1开发介绍 —— 二、分词(五)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...

随机推荐

  1. EOS Dapp开发(1)-基于Docker的开发环境搭建

    随着EOS主网的上线,相信基于EOS的Dapp开发会越来越多,查阅了很多资料相关的开发资料都不是很多,只能自己摸索,按照网上仅有的几篇教程,先git clonehttps://github.com/E ...

  2. php源码编译常见错误解决方案大全

    php源码编译常见错误解决方案大全http://www.cnlvzi.com/index.php/Index/article/id/143 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息 ...

  3. Openstack(七)keystone

    官方安装文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/index.html 7.1 keystone简介 Keystone 中 ...

  4. Spark 参数配置的几种方法

    1.Spark 属性Spark应用程序的运行是通过外部参数来控制的,参数的设置正确与否,好与坏会直接影响应用程序的性能,也就影响我们整个集群的性能.参数控制有以下方式:(1)直接设置在SparkCon ...

  5. Kconfig文件说明

    Kconfig的格式 下面截取/drivers/net下的Kconfig文件中的部分内容: # Network device configuration menuconfig NETDEVICES d ...

  6. Android开发新手问题

    因为最近在用空闲时间学习Android开发,期间确实遇到了一些问题.而且因为我之前在公司里一直都是在使用Eclipse进行开发,所以最初我学习Android时也就选择了Google的包含android ...

  7. Android5.0免Root截屏,录屏

    http://blog.csdn.net/wds1181977/article/details/52174840 MediaProjection介绍 MediaProjection可以用来捕捉屏幕,具 ...

  8. bzoj1610 / P2665 [USACO08FEB]连线游戏Game of Lines

    P2665 [USACO08FEB]连线游戏Game of Lines 第一次写快读没判负数....(捂脸) 暴力$O(n^2)$求斜率,排序判重. 注意垂直方向的直线要特判. end. #inclu ...

  9. Maven聚合项目在eclipse中显示没有层次

    大部分时间都在用idea做maven的项目,今天用eclipse导入了maven项目,果然不出所料,界面有显示问题,各个模块都堆叠在同一层级,根本看不出父项目与子项目之间的层次关系,见下图: 于是找修 ...

  10. Java构造函数和this关键字

    一.  构造函数 /* 一个函数中定义的变量必须要初始化,否则编译会报错 一个类中的数据成员 1. 如果在定义的时候不初始化,则它的值是系统自动分配好的默认值! 如int型为零 boolean型是fa ...