全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

ES6中的箭头函数实例详解

本文实例讲述了ES6中的箭头函数。分享给大家供大家参考,具体如下:

语法

我们先来看看箭头函数的语法:

([param] [, param]) => {
  statements
}
param => expression

param 是参数,根据参数个数不同,分这几种情况:

() => { … } // 零个参数用 () 表示;
x => { … } // 一个参数可以省略 ();
(x, y) => { … } // 多参数不能省略 ();

示例

我们再来看看一些示例,看看在ES5中的函数怎么通过ES6中的箭头函数来替代吧:

// ES5
var selected = allJobs.filter(function (job) {
 return job.isSelected();
});
// ES6
var selected = allJobs.filter(job => job.isSelected());

当然,也可以定义多个参数:

// ES5
var total = values.reduce(function (a, b) {
 return a + b;
}, 0);
// ES6
var total = values.reduce((a, b) => a + b, 0);

当然=>后面也不一定非得接return 之后的语句,看下面:

// ES5
$("#confetti-btn").click(function (event) {
 playTrumpet();
 fireConfettiCannon();
});
// ES6
$("#confetti-btn").click(event => {
 playTrumpet();
 fireConfettiCannon();
});

但是需要注意的是,多行语句需要用{}括起来,单行表达式不需要{},并且会作为函数返回值。

x => { return x * x }; // 函数返回 x * x
x => x * x; // 同上一行
x => return x * x; // SyntaxError 报错,不能省略 {}
x => { x * x }; // 合法,没有定义返回值,返回 undefined

和普通函数一样,箭头函数也可以使用剩余参数和默认参数

var func1 = (x = 1, y = 2) => x + y;
func1(); // 得到 3
var func2 = (x, ...args) => { console.log(args) };
func2(1,2,3); // 输出 [2, 3]

特性

介绍完了箭头表达式的语法和示例,我们就需要思考一下了。如果箭头表达式仅仅就是简化了函数的命名,我们为什么要改变原来的习惯而去使用它呢?所以我们需要了解一下箭头函数的特性。

箭头函数内部没有constructor方法,也没有prototype,所以不支持new操作。但是它对this的处理与一般的普通函数不一样。箭头函数的 this 始终指向函数定义时的 this,而非执行时。我们通过一个例子来理解:

var o = {
  x : 1,
  func : function() { console.log(this.x) },
  test : function() {
    setTimeout(function() {
      this.func();
    }, 100);
  }
};
o.test(); // TypeError : this.func is not a function

上面的代码会出现错误,因为this的指向从o变为了全局(函数调用中的this都是指向全局的)。如果大家对JavaScript中的this不是很熟悉的话,可以看看前面的一篇文章《javascript中this的用法实例详解》。好了,回归正题,我们需要修改上面的代码如下:

var o = {
  x : 1,
  func : function() { console.log(this.x) },
  test : function() {
    var _this = this;
    setTimeout(function() {
      _this.func();
    }, 100);
  }
};
o.test();

通过使用外部事先保存的this就行了。这里就可以利用到箭头函数了,我们刚才说过,箭头函数的 this 始终指向函数定义时的 this,而非执行时。所以我们将上面的代码修改如下:

var o = {
  x : 1,
  func : function() { console.log(this.x) },
  test : function() {
    setTimeout(() => { this.func() }, 100);
  }
};
o.test();

这回this就指向o了。

我们还需要注意一点的就是这个this是不会改变指向对象的,我们知道call和apply可以改变this的指向,但是在箭头函数中是无效的。

var x = 1,
  o = {
    x : 10,
    test : () => this.x
  };
o.test(); // 1
o.test.call(o); // 依然是1

希望本文所述对大家ECMAScript程序设计有所帮助。


# ES6  # 箭头函数  # ES6中箭头函数的定义与调用方式详解  # javascript ES6中箭头函数注意细节小结  # 关于ES6箭头函数中的this问题  # 深入浅出ES6新特性之函数默认参数和箭头函数  # 详解Javascript ES6中的箭头函数(Arrow Functions)  # es6函数之箭头函数用法实例详解  # JavaScript ES6箭头函数使用指南  # 关于ES6中的箭头函数超详细梳理  # 而非  # 返回值  # 的是  # 都是  # 好了  # 多个  # 不需要  # 说过  # 下了  # 要注意  # 而去  # 给大家  # 再来  # 几种  # 不支持  # 可以使用  # 这回  # 报错  # 还需  # 所述 


相关文章: 建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  南平网站制作公司,2025年南平市事业单位报名时间?  如何在建站之星绑定自定义域名?  如何用狗爹虚拟主机快速搭建网站?  建站之星伪静态规则如何设置?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  建站之星各版本价格是多少?  如何在IIS中新建站点并配置端口与物理路径?  如何注册花生壳免费域名并搭建个人网站?  如何用花生壳三步快速搭建专属网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在橙子建站上传落地页?操作指南详解  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何快速使用云服务器搭建个人网站?  如何在IIS中配置站点IP、端口及主机头?  如何用已有域名快速搭建网站?  Bpmn 2.0的XML文件怎么画流程图  贸易公司网站制作流程,出口贸易网站设计怎么做?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  常州企业网站制作公司,全国继续教育网怎么登录?  建站之星如何取消后台验证码生成?  如何安全更换建站之星模板并保留数据?  长沙做网站要多少钱,长沙国安网络怎么样?  如何在IIS7上新建站点并设置安全权限?  详解jQuery停止动画——stop()方法的使用  如何选择服务器才能高效搭建专属网站?  如何快速搭建自助建站会员专属系统?  建站之星价格显示格式升级,你的预算足够吗?  SQL查询语句优化的实用方法总结  如何通过NAT技术实现内网高效建站?  如何正确下载安装西数主机建站助手?  外贸公司网站制作哪家好,maersk船公司官网?  建站之星logo尺寸如何设置最合适?  代刷网站制作软件,别人代刷火车票靠谱吗?  Swift中switch语句区间和元组模式匹配  如何快速完成中国万网建站详细流程?  如何快速搭建支持数据库操作的智能建站平台?  如何通过万网虚拟主机快速搭建网站?  制作网站怎么制作,*游戏网站怎么搭建?  高防服务器租用如何选择配置与防御等级?  济南专业网站制作公司,济南信息工程学校怎么样?  如何在宝塔面板创建新站点?  湖北网站制作公司有哪些,湖北清能集团官网?  建站org新手必看:2024最新搭建流程与模板选择技巧  ,在苏州找工作,上哪个网站比较好?  魔方云NAT建站如何实现端口转发?  香港服务器部署网站为何提示未备案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。