es6新特性_Node.JS实战65:ES6新特性:箭头函数

有人说ES6(ES2015)最具魅力的是箭头函数。但真的,我不这么认为:箭头函数这玩意真是又丑又变扭!

8ece7cbb3b7a2cc3444b633e6cc58b65.png

不过,箭头函数确实有它的功能优势:

1、简洁:

(虽然我也不认为这是真的简洁,还是认为它是很变扭的)

看一段代码:

const numbers = [1,2,3];

const event = numbers.filter(function(x){

return x % 2 === 0;

});

用箭头语法重写是这样的:

const numbers = [1,2,3];

const event = numbers.filter(x => x % 2 === 0);

(真是种稀里糊涂的格式,不易理解 -_-!)

解释:

function关键字被删除,只留下参数,紧跟着的是箭头(=>),然是函数功能体。

如果参数列表中包含多个参数,必须用括号包裹,并用逗号分割。

此外,没有参数时,必须在箭头前用一组空括号:()=>{...}。

当函数的主体只是一行时,可以不使用return,因为它是隐式应用的。

2、绑定的词法作用域

直接用例子来说明:

function DelayedGreeter(name){

this.name = name;

}

DelayedGreeter.prototype.greet = function(){

setTimeout(function cb(){

console.log("hello " + this.name);

},500);

}

const greeter = new DelayedGreeter("world");

greeter.greet();

在这段代码中,期望输出Hello world,但world参数并未能传到cb函数的,所以输出会是:

5daa6635125006267a92afd5db5b4446.png

不引入箭头函数时,如果想要得到正确的输出,需要进行bind操作:

1f45d5b8287f21e764e73b79571852d3.png

function DelayedGreeter(name){

this.name = name;

}

DelayedGreeter.prototype.greet = function(){

setTimeout( (function cb(){

console.log("hello " + this.name);

}).bind(this) ,500);

}

const greeter = new DelayedGreeter("world");

greeter.greet();

66a574d6ec9f77014d7110c7b60d5e57.png

但如果使用箭头函数,由于它具有绑定作用域的特性,可以较方便的实现上述同样的效果:

08f2184250c39101fd0b4de3ad435d12.png

function DelayedGreeter(name){

this.name = name;

}

DelayedGreeter.prototype.greet = function(){

setTimeout( ()=> console.log("hello " + this.name) ,500);

}

const greeter = new DelayedGreeter("world");

greeter.greet();

在这个方面的应用确实是方便了一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值