Last night I was reading this post: ES6 arrow functions, syntax and lexical scoping and going through the comments I saw this question:

so arrow functions always inherit scope?

The answer was by Barney: always.

I went to the console and typed:

nvm use 4
var doSome = () => { console.log(this.x) }{x: 'hello'});
global.x = 'hello';{x: 'good bye'});

Could you guess what is going to be printed?

I could replicate this on ES5 without fat arrow function.

nvm use 0.10
var doSome = function() { console.log(this.x) }.bind(void(0));{x: 'hello'});

global.x = 'hello';{x: 'good bye'});

What do you think? What does Babel does?