Arrow functions were introduced in ES6, the sixth edition of ECMAScript, officially named ECMAScript 2015.
Their compact syntax makes short functions easier to write. A traditional function such as `function (x) { return x * 2; }` can be written as `x => x * 2`. Arrow functions are especially common with array methods such as `map()`, `filter()`, and `reduce()`, where a small callback is needed.
Their most distinctive behavioral difference is how they handle `this`. An arrow function does not create its own dynamic `this`; instead, it captures the value from the surrounding lexical scope. It also does not have its own `arguments` object and cannot be used as a constructor with `new`. These traits make arrow functions useful for callbacks but unsuitable for every method or object design.
ES6 was a major modernization of JavaScript. Alongside arrow functions, it introduced `let` and `const`, classes, modules, template literals, destructuring, promises, and the spread syntax. “ES6” and “ES2015” therefore refer to the same language edition.