In a regular function, the this keyword is dynamic. Its value depends on how the function is called (e.g., as a method of an object, as a constructor, etc.).
In an arrow function, this is lexical. It does not have its own this. Instead, it inherits this from the surrounding parent scope (the execution context where it was defined).
Regular Functions can be used as constructors to create new objects using the new keyword.
Arrow Functions cannot be used as constructors. They lack the internal [[Construct]] method and don't have a prototype property.
Regular Functions have access to an arguments object, which is an array-like object containing all values passed to the function.
Arrow Functions do not have their own arguments object. If you try to use it, they will look to the parent scope. (Modern tip: Use Rest Parameters (...args) => {} instead).
Implicit Return If an arrow function has only one expression, you can omit the curly braces and the return keyword.
Parameter Parentheses: If there is exactly one parameter, you can omit the parentheses.