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
node
var doSome = () => { console.log(this.x) }
doSome.call({x: 'hello'});
global.x = 'hello';
doSome.call({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
node
var doSome = function() { console.log(this.x) }.bind(void(0));

doSome.call({x: 'hello'});

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

What do you think? What does Babel does?