官术网_书友最值得收藏!

Arrow functions

Arrow functions allow you to shorten function declarations, from function() {} to simply () => {}. Indeed, you can replace a line like this:

SomeEmitter.on('message', function(message) { console.log(message) });

To:

SomeEmitter.on('message', message => console.log(message));

Here, we lose both the brackets and curly braces, and the tighter code works as expected. 

Another important feature of arrow functions is they are not assigned their own this—arrow functions inherit this from the call site. For example, the following code does not work:

function Counter() {
this.count = 0;

setInterval(function() {
console.log(this.count++);
}, 1000);
}

new Counter();

The function within setInterval is being called in the context of setInterval, rather than the Counter object, so this does not have any reference to count. That is, at the function call site, this is a Timeout object, which you can check yourself by adding console.log(this) to the prior code.

With arrow functions, this is assigned at the point of definition. Fixing the code is easy:

setInterval(() => { // arrow function to the rescue!
console.log(this);
console.log(this.count++);
}, 1000);
// Counter { count: 0 }
// 0
// Counter { count: 1 }
// 1
// ...
主站蜘蛛池模板: 东城区| 滁州市| 旌德县| 阿合奇县| 上杭县| 黄山市| 林甸县| 昆山市| 阿城市| 香港| 巴彦县| 华亭县| 龙江县| 新郑市| 波密县| 夏津县| 丹巴县| 霍山县| 乌鲁木齐县| 瑞丽市| 崇州市| 屯留县| 新余市| 工布江达县| 股票| 盘山县| 柳州市| 遂宁市| 永和县| 平乐县| 阿瓦提县| 锡林郭勒盟| 台前县| 茶陵县| 古丈县| 田东县| 双峰县| 利津县| 阳信县| 金山区| 柳林县|