Estructurar correctamente nuestro código JavaScript
A la hora de crear código, cuanto más aumenta la complejidad del proyecto, más aumenta las líneas de código del mismo. Es por ello que existen mecanismo para asegurar que podemos organizar nuestro código de una manera lógica y concisa, para así evitar situaciones en las que el mantenimiento del código sea inabordable. Una de estas estrategias es separar nuestro código en múltiples ficheros, cada uno encargado de un set de funcionalidades específico. Esto es lo que llamamos separación de preocupaciones.
<script> tiene un atributo llamado src.
Esto indica el fichero que cargará con el código JavaScript. </div>
</div>
<script src="../../prism.js"></script>
<script type="module" src="index.js">
</script>
</body>
</html>
Durante mucho tiempo JavaScript evolucionó sin problemas de compatibilidad, todos los cambios que se añadían no modificaban funcionamientos anteriores. Con la introducción de ECMASCript 5, algunos cambios empezaban a modificar la funcionalidad establecida de JavaScript. Para la seguridad del código antiguo, muchas de esas modificaciones están desactivadas por defecto. Para activarlas hay que añadir la directiva use strict.
Los módulos en javascript permiten separar los ficheros que contienen el código en trozos más
pequeños. Gracias a mecanismos de importación y exportación es posible separar la lógica de las
funcionalidades en ficheros más pequeños e importarlos donde fuese necesario. Las dos
declaraciones más importantes son import y export. Básicamente podemos
decir que un módulo es un fichero de código.
Los módulos son evaluados nada más importarse, por lo que el código que no esté
contenido se ejecutará nada más importarse el fichero. Además, los módulos siempre funcionan en
modo use strict
En los módulos, el comando this es indefinido, esto es debido porque cada módulo
tiene un scope de alto nivel (lo definiremos próximamente).
Vamos a comprobar si primero se ejecuta el código de módulo al importarse, para ello vamos a añadir algunos breakpoints a nuestro código y controlar la ejecución de nuestros scripts.
index.js.

/beginner/2_separation_concerns/index.js
// 1. index.js
import {externalExecution} from "./additional.js";
externalExecution();
/beginner/2_separation_concerns/additional.js
// 2. additional.js
function externalExecution() {
console.log("I'm being executed");
}
export { externalExecution };
// Extra, window
console.log("Window property");
var test = function() {
return this === window;
}
console.log(test());
var testBind = test.bind(window);
console.log(testBind());