当前位置:首页 > 日记 > 正文

ES6中的箭头函数实例详解

ES6中的箭头函数实例详解

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

语法

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

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

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

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

示例

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

// ES5var selected = allJobs.filter(function (job) { return job.isSelected();});// ES6var selected = allJobs.filter(job => job.isSelected());

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

// ES5var total = values.reduce(function (a, b) { return a + b;}, 0);// ES6var 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 * xx => x * x; // 同上一行x => return x * x; // SyntaxError 报错,不能省略 {}x => { x * x }; // 合法,没有定义返回值,返回 undefined

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

var func1 = (x = 1, y = 2) => x + y;func1(); // 得到 3var 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(); // 1o.test.call(o); // 依然是1

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

相关文章

关于考试的qq空间留言有关考试的搞

关于考试的qq空间留言有关考试的搞

空间,考试,留言,句子,热门,  考试过后,朋友们总是有很多感想,你想知道更多关于考试的搞笑qq空间留言吗?今天小编为你推荐最新关于考试的qq空间留言,欢迎阅读。关于考试的qq空间留言【精选篇】一、小时候最怕的梦是梦到自己找厕所,最最怕的是,…

JavaScript字符串对象

JavaScript字符串对象

对象,字符串,电脑软件,JavaScript,JavaScript 对象是一种复合值,是有属性或已命名值的集合。通过”.”来引用属性值。当属性值是一个函数的时候,称其为方法。那么本篇文章来讲解讲解JavaScript中的String对象。 我们在书写js代码时,经常调…

Word中进行实现页面横竖混排的操作

Word中进行实现页面横竖混排的操作

操作技巧,页面,操作步骤,电脑软件,Word,  Word文档中,一般情况下我们将所有页面均设置为横向或纵向。但有时也需要将其中的某些页面设置为其它页面方向不同,今天,小编就教大家在Word中进行实现页面横竖混排的操作技巧。Word中进行实现页面横…

微信小程序 弹窗自定义实例代码

微信小程序 弹窗自定义实例代码

实例代码,自定义,程序,电脑软件,微信小,微信小程序 弹窗首先wxml代码:<view class="myToast" hidden="{{nullHouse}}">暂无有关信息</view><view bindtap="clickArea">点击此处</view>  注:hidden属性用于切换比较频繁的地方。wxss代…

JS变量中有var定义和无var定义的区

JS变量中有var定义和无var定义的区

命令,义和,变量,中有,定义, 之前我们在写js代码的时候都知道可以用var定义全局变量和局部变量,也可以省略var,而且在非严格模式下不会报错,但是并不知道两者的区别...var x = 1;y = 4;console.log(x);//1console.log(y);//4console.log(win…

excel中合并计算的方法

excel中合并计算的方法

合并,方法,计算,电脑软件,excel,  Excel中的计算该如何合并计算呢?接下来是小编为大家带来的excel中合并计算的方法,供大家参考。excel中合并计算的方法:  合并计算步骤1:打开一张销售表,选中合并计算结果所放的位置。打开【数据】选项卡中…

jQuery+PHP+Mysql实现抽奖程序

jQuery+PHP+Mysql实现抽奖程序

抽奖,PHP+Mysql,程序,电脑软件,jQuery,抽奖程序在实际生活中广泛运用,由于应用场景不同抽奖的方式也是多种多样的。本文将采用实例讲解如何利用jQuery+PHP+MySQL实现类似电视中常见的一个简单的抽奖程序。查看演示本例中的抽奖程序要实现从…

vue+vuex+axio从后台获取数据存入v

vue+vuex+axio从后台获取数据存入v

组件,获取数据,后台,共享数据,电脑软件,在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-server模拟的…

关于vuex的学习实践笔记

关于vuex的学习实践笔记

学习,笔记,电脑软件,vuex,Vuex 简介Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。例如(travel store):import * as types from '../t…

如何设置PPT2007演示文稿中图例区

如何设置PPT2007演示文稿中图例区

位置,图例,设置,如何设置,演示文稿,  众所周知,PPT插入图表之后,默认的图例区都是在图表下方的,这让不习惯的人很不适应,那么怎么修改PPT图例区的位置呢?以下是小编为您带来的关于设置PPT2007图例区的位置,希望对您有所帮助。设置PPT2007图例…

Excel2007中批量删除文本和控件对

Excel2007中批量删除文本和控件对

对象,批量删除,控件,操作方法,操作步骤,  当工作表中有很多控件或者图片等对象时,一个一个去删除会非常的繁琐。案例阐述了如何一次性删除整个工作表中图形、控件和影音等对象,方便快捷。今天,小编就教大家在Excel2007中批量删除文本和控件…

Js利用Canvas实现压缩功能

Js利用Canvas实现压缩功能

压缩,功能,电脑软件,Js,Canvas,最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:/* * 图片压缩 * img 原始图片 * width 压…