¿Cómo evitar la anulación usando la expresión de función invocada inmediatamente en JavaScript?

La anulación es básicamente cuando define varias funciones o variables que tienen el mismo nombre, la última definida anulará todas las definidas anteriormente y cada vez que invoque una función, se ejecutará la última definida. La anulación generalmente ocurre cuando tiene varios archivos javascript en su página. Puede ser un archivo externo o el archivo que ha creado internamente. Esto suele ocurrir debido a la presencia de variables o funciones con el mismo nombre en el ámbito global.

Supongamos que tenemos los siguientes archivos:
Nombre de archivo: index.html

<!DOCTYPE html>
<html>
<head>
    <title>IIFE</title>
    <script src="script1.js"></script>
    <script src="script2.js"></script>
    <script src="app.js"></script>
</head>
<body></body>
</html>

Este archivo ha vinculado script1.js, script2.js y app.js como archivos javascript externos que se detallan a continuación:

Nombre de archivo: script1.js

var arsalanGreeter = {};
arsalanGreeter.name = "Arsalan";
var greeting = "Hello ";
arsalanGreeter.sayHello = function() {
    console.log(greeting + arsalanGreeter.name);
}

Nombre de archivo: script2.js

var johnGreeter = {}
johnGreeter.name = "John";
var greeting = "Hi ";
johnGreeter.sayHi = function() {
    console.log(greeting + johnGreeter.name);
}

Nombre de archivo: app.js

arsalanGreeter.sayHello();
johnGreeter.sayHi();

Aquí app.js es responsable de invocar funciones dentro de script1.js y script2.js y obtendrá el siguiente resultado en la ventana de su consola como se muestra a continuación:

Bueno, esto sucede porque tenemos el mismo nombre de variable en script1.js y script2.js como «saludo». Esta es la razón por la que script2.js reemplaza a script1.js.

Para solucionar este problema, utilizaremos el concepto de expresión de función invocada inmediatamente (IIFE) como se describe a continuación:

Ahora nuestros archivos se verán así:
Nombre de archivo: index.html

<!DOCTYPE html>
<html>
<head>
    <title>IIFE</title>
    <script src="script1.js"></script>
    <script src="script2.js"></script>
    <script src="app.js"></script>
</head>
<body></body>
</html>

Nombre de archivo: script1.js

(function (window) {
   var arsalanGreeter = {};
   arsalanGreeter.name = "Arsalan";
   var greeting = "Hello ";
   arsalanGreeter.sayHello = function() {
       console.log(greeting + arsalanGreeter.name);
   }
   window.arsalanGreeter = arsalanGreeter; 
})(window);

Nombre de archivo: script2.js

(function (window) {
   var johnGreeter = {};
   johnGreeter.name = "John";
   var greeting = "Hi ";
   johnGreeter.sayHi = function() {
    console.log(greeting + johnGreeter.name);
   }
   window.johnGreeter = johnGreeter; 
})(window);

En los dos archivos anteriores, creamos IIFE y pasamos a la variable de ventana e invocamos eso.
Nombre de archivo: app.js

arsalanGreeter.sayHello();
johnGreeter.sayHi();

Después de hacer los cambios mencionados anteriormente que agregan la expresión de función invocada inmediatamente, la salida de la consola se verá como se muestra a continuación:

Publicación traducida automáticamente

Artículo escrito por MohdArsalan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *