DEV Community

Cover image for what are arrow functions
Lupita Rivera
Lupita Rivera

Posted on • Edited on

what are arrow functions

before we jump into what is an arrow function lets talk about functions in JavaScript. before ES6 every time we wrote a function we use the word Function Keyword,

ex,
const divide = function (x,y){
return x/y;
}

we could had an Anonymous function
or a name function

ex,
function divide(){
}

but we still using the function keyword. and that could get kinda lengthy in our code specially when we are using more complex code and always passing in the function keyword.

so this is where arrow functions come in.

Arrow function is one of the features introduced in the ES6 version of JavaScript. It allows you to create functions in a cleaner way compared to regular function expression.

but theres also on some situations they do behave differently. we will talk about that as we go but for now what this really means is that makes the function shorter in a way of writing a function.

SYNTAX

ex, from the divide function from above lets write in as an arrow function

const divide = (x,y) => {
return x/y;
}

Implicit Return

we can also write as an implicit return that means i wont need the return keyword and we get rid of the curly braces and replace it with parenthesis

ex,
cont divide = (x,y) => (x / y) whatever expression is inside of the parenthesis will be automatically returned, it's an explicit return.

but we can also write it even shorter cont divide = (x,y) => x / y by taking out the parenthesis. you can only do this if you have a single expression, you cannot pass a if else statement

but this is not the only difference between arrow functions and regular functions. if we go to the MDN

other differences:

Use of this keyword

unlike Regular functions, arrow function does not have their own "this" keyword. like a regular function expression does.
the keyword this is going to change is going to be set in a given function depending on how the function is called.

but with an arrow function the keyword this is not going to change relative to the context or the parent that the function is define in.

ex,

const person ={
name: "Lupita",
sayHi: function () {
console.log(this.name, "says hi!")
}
}

person.sayHi()

okay when i call person.sayHi the value of this is going to be determined by how I'm calling it, I'm calling it sayHi() on person the object person will be the value of this - this.name should be Lupita. so when i run the code i get

Lupita says hi!

However if i use an arrow function instead

Image description

we just get says hi! so whats going on here is that the value of this is not being changed , not being set when im calling person.sayHi() like a normal function would. if we look at just this.

const person ={
name: "Lupita",
sayHi:()=> {
console.log(this)
console.log(this.name, "says hi!")
}
}

Image description

we see here this is just set to the window objet, just as if this function where defined on its own no inside of the person object. and it doesn't matter how i call that function
if its an arrow function the value of this is not going to be set to that person object unless i where to bind it. but it's own an arrow function does not get a new or diff value for this.

Using a new keyword

Regular functions created using function declarations or expressions are constructible and callable. Regular functions are constructible; they can be called using the new keyword.

However, the arrow functions are only callable and not constructible, i.e., arrow functions can never be used as constructor functions.

ex,

regular function

Image description

as you can see it returns 5,

Arrow function

Image description

So this is basically Arrow functions. If you want further reference, MDN
is a good place to check.

Thank you for reading :)

Top comments (0)