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

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
// ...
主站蜘蛛池模板: 民权县| 双辽市| 阿图什市| 罗定市| 青铜峡市| 临澧县| 潼关县| 石柱| 基隆市| 娄烦县| 依安县| 天镇县| 营山县| 永胜县| 宾阳县| 罗源县| 大庆市| 延安市| 桂东县| 张北县| 基隆市| 永川市| 郎溪县| 富阳市| 五峰| 怀集县| 建湖县| 石渠县| 缙云县| 榆中县| 平潭县| 仁布县| 台中市| 政和县| 南陵县| 莲花县| 贡嘎县| 门源| 桦甸市| 汝州市| 石屏县|