Self-Executing Anonymous Function

May 20, 2023

A Self-Executing Anonymous Function, also known as an Immediately Invoked Function Expression (IIFE), is a design pattern used in JavaScript programming to create a private scope for code execution. It is a function that is declared and executed immediately, without being assigned to a variable or explicitly called. It is an anonymous function that is wrapped inside a set of parentheses, followed by another set of parentheses which immediately invokes the function. The purpose of an IIFE is to isolate code execution from the global scope and to prevent naming conflicts with other functions or variables.

Basic Syntax

The basic syntax for an IIFE is as follows:

(function () {
    // code to be executed

This syntax is made up of two parts:

  • An anonymous function that is wrapped inside a set of parentheses. This function can take parameters like any other function, but it is usually defined without any parameters.
  • Another set of parentheses immediately following the function declaration, which invokes the function.

An IIFE can also be written with a named function expression, as shown below:

(function myFunction() {
    // code to be executed

Purpose and Usage

The primary purpose of an IIFE is to create a private scope for code execution. By default, JavaScript has a global scope where all variables and functions are defined. When you declare a variable or function in the global scope, it can be accessed and modified by any other part of the program. This can lead to naming conflicts and unintended consequences.

By using an IIFE, you can create a new scope that is separate from the global scope. Any variables or functions defined inside the IIFE are not accessible from outside the function. This allows you to define private variables and functions that can be used within the function without worrying about naming conflicts or unintended modifications.

Another use case for IIFEs is to execute code immediately without the need for an explicit function call. This can be useful when you want to set up a particular environment before executing the main code. For example, you might want to load external scripts, set up event listeners, or perform some other initialization tasks before running the main code.


Here is an example of how an IIFE can be used to create a private scope and avoid naming conflicts:

var myModule = (function () {
    var privateVariable = 0;

    function privateFunction() {
        console.log("Private function called");

    return {
        publicFunction: function () {
            console.log("Public function called");
        publicVariable: 1

myModule.publicFunction();  // "Private function called" "Public function called"
console.log(myModule.publicVariable); // 1
console.log(myModule.privateVariable); // undefined

In this example, we have an IIFE that defines a myModule object with two properties: a publicFunction and a publicVariable. Inside the IIFE, we also define a privateVariable and a privateFunction, which cannot be accessed from outside the function.

When we call myModule.publicFunction(), it invokes the privateFunction and logs "Private function called" and "Public function called" to the console. We can also access the publicVariable property of myModule, but we cannot access the privateVariable.


There are several advantages to using IIFEs in your JavaScript code:

1. Encapsulation

By creating a private scope with an IIFE, you can encapsulate your code and protect it from the global scope. This can help prevent naming conflicts and improve the maintainability of your code.

2. Modularization

IIFEs can also be used to create modular code that is easy to reuse and maintain. By defining a module as an IIFE, you can create a self-contained unit of functionality that can be used in other parts of your code.

3. Performance

Because IIFEs create a new scope, they can be used to optimize performance by reducing the number of variables and functions in the global scope. This can improve the speed of your code and reduce memory usage.