Arrow functions in Javascript

According to MDN, An arrow function expression is a syntactically compact alternative to a regular function expression, although without its own bindings to the this, arguments, super, or keywords. Arrow function expressions are ill-suited as methods, and they cannot be used as constructors.

There are 3 subtle differences in regular functions and arrow functions in JavaScript.

  • No own this binding

    Arrow functions do not have their own value. The value of this inside an arrow function is always inherited from the enclosing scope.


this.a = 100;
let arrowFunc = () => {this.a = 150};
function regFunc() {
   this.a = 200;


This will give the output −


See that the arrow function changed this object outside its scope. The regular function just made the changes within its own.

  • Arrow functions do not have a arguments array In JS arguments array in functions is a special object that can be used to get all the arguments passed to the function. Similar to this, arrow functions do not have their own binding to a arguments object, they are bound to arguments of enclosing scope.
  • Arrow functions are callable but not constructible If a function is constructible, it can be called with new, i.e. new User(). If a function is callable, it can be called without new (i.e. normal function call).

Functions created through function declarations / expressions are both constructible and callable.

Arrow functions (and methods) are only callable. class constructors are only constructible.

If you are trying to call a non-callable function or to construct a nonconstructive function, you will get a runtime error.


let arrowFunc = () => {}
new arrowFunc()


This code gives the error −

arrowFunc is not a constructor