DEV Community

Cover image for Functions in JavaScript
Ali Sina Yousofi
Ali Sina Yousofi

Posted on

Functions in JavaScript

Introduction

Functions in JavaScript are one of the most important concepts to learn when it comes to programming in this language. A function is essentially a block of code that can be executed multiple times throughout your program, and it can be called from different parts of your code. Functions are also useful for keeping your code organized and modular, since you can break down complex tasks into smaller, more manageable pieces.

Here's a basic example of a function in JavaScript:

function basic example

This function, greet, takes in a parameter name and logs a greeting to the console. When we call the function with the argument 'Alice', it logs the message "Hello, Alice!" to the console.

Let's break down this code a bit more:

The function keyword is used to define a new function. greet is the name of the function. (name) is the parameter that the function takes in. In this case, it's a single parameter called name. The curly braces {} contain the code that will be executed when the function is called. Console.log() is a built-in function in JavaScript that logs messages to the console.

Now let's look at some more examples of functions and some of the different ways they can be used.

Functions with multiple parameters

Functions can take in multiple parameters, separated by commas. For example:

Image description

This function, addNumbers, takes in two parameters, num1 and num2, and returns their sum. We call the function with the arguments 5 and 7, and assign the result to a variable called result. Then we log the value of result to the console, which is 12.

Functions that return values

Functions can also return values, using the return keyword. For example:

Image description

This function, multiplyNumbers, takes in two parameters, num1 and num2, multiplies them together, and returns the result. We call the function with the arguments 4 and 6, and assign the result to a variable called result. Then we log the value of result to the console, which is 24.

Anonymous functions

Functions don't have to have a name! In fact, you can define functions without giving them a name at all, and instead assign them to a variable. These are called anonymous functions. For example:

Image description

In this example, we define an anonymous function that takes in a parameter name and logs a greeting to the console. We assign this function to a variable called greet. Then we call the function using greet('Bob'), which logs the message "Hello, Bob!" to the console.

Arrow functions

Arrow functions were introduced in ES6 as a more concise way of defining functions in JavaScript. They are also sometimes referred to as "fat arrow" functions because of the => syntax used to define them. Arrow functions have become very popular in modern JavaScript development due to their readability and ease of use.

Here's a basic example of an arrow function:

Image description

In this example, we define an arrow function called addNumbers that takes in two parameters, num1 and num2, adds them together, and returns the result. We then call the function with the arguments 5 and 7, assign the result to a variable called result, and log the value of result to the console.

Now let's break down the syntax of an arrow function:

First, we declare the function using the const keyword (or let or var, depending on your use case). Then we have the function parameters, enclosed in parentheses (). In this case, there are two parameters, num1 and num2. Next comes the fat arrow =>, which indicates that this is an arrow function. After the fat arrow, we have the function body, enclosed in curly braces {}. In this case, the function body contains only a single statement, which is the return statement.

Closure functions

A closure is a feature in JavaScript that allows a function to access variables from its outer lexical scope even after the outer function has returned. In other words, a closure gives you access to an outer function's scope from an inner function.

Here's an example to demonstrate how closures work:

Image description

In this example, we have an outer function that defines a variable count and an inner function that increments count and logs it to the console. The outer function then returns the inner function. We create a new variable counter that stores the return value of outer(), which is the inner function.

When we call counter() for the first time, the count variable inside the closure is initialized to 0 and incremented to 1. On the second call to counter(), the count variable inside the closure still exists and has a value of 1, so it is incremented to 2. This continues on subsequent calls to counter().

The important thing to understand here is that the count variable is "closed over" by the inner function, meaning that it is accessible to the inner function even after the outer function has finished executing. This is what allows the count variable to maintain its state between calls to the counter function.

I hope that my blog has been informative, thought-provoking, and perhaps even a little bit entertaining. It is my goal to provide value to my readers, and your continued support and feedback inspire me to keep writing and sharing.

Top comments (2)

Collapse
 
jonrandy profile image
Jon Randy 🎖️ • Edited

Your greet function in the anonymous function example is not an anonymous function. The act of assigning an anonymous function to a variable gives it a name - making it cease to be anonymous. This can easily be checked with the name property of functions

// 'greet' is NOT an anonymous function
const greet = function(name) {
  console.log('Hello' + name)
}
console.log(greet.name)  // 'greet'

// but this function is
console.log (( function(name) { console.log('Hello' + name) } ).name)  // <empty string>
Enter fullscreen mode Exit fullscreen mode
Collapse
 
alisinayousofi profile image
Ali Sina Yousofi

Since anonymous functions are not accessible after its initial creation. Therefore, I often assigned it to a variable. Thanks for reminding me.