Before arrow functions, new functions defined their own `this` value. To use `this` inside a traditional function expression, we have to write a workaround like so:
```javascript
// ES5 syntax
function Person() {
// we assign `this` to `self` so we can use it later
An arrow function does not have its own `arguments` object. For example, if you do not know the number of arguments passed to a function, instead of using `arguments` you can use the `rest` operator:
```javascript
const myFunc = (...n) => {
console.log('The first argument is', n[0]);
}
myFunc(10,20,30,40,40); // output: The first argument is 10
Arrow functions provide no arguments object. Therefore, if the arguments object is used in an arrow function it will reference the arguments of the enclosing scope. For example,
```
const arguments = ["arg1", "arg2", "arg3"];
const arrow = () => arguments[1];
console.log(arrow("innerarg1", "innerarg2", "innerarg3"));//arg2-ignores local arguments goes to enclosed scope.
function regular() {
console.log(arguments[1]);
}
console.log(regular("innerarg1", "innerarg2", "innerarg3"));//innerarg2-uses local arguments.