Конфликты переменных в JavaScript

Пусть у нас есть HTML страница index.html, на которой в теге script вы создаете переменную str и выводите ее на экран:

<html> <head> <script> let str = 'script text'; alert(str); // выведет 'script text' </script> </head> <body> ... </body> </html>

Пусть у нас также есть файл script.js, в котором также задается переменная str:

let str = 'file text';

Пусть теперь наш файл script.js подключается к странице index.html следующим образом:

<html> <head> <script> let str = 'script text'; </script> <script src="script.js"></script> <script> alert(str); </script> </head> <body> ... </body> </html>

Так как переменная str есть и в файле index.html, и в файле script.js, то будет конфликт, в котором победит та переменная, которая написана ниже, то есть переменная из файла script.js. То есть наш алерт выведет file text, а не script text, как мы ожидаем.

Проблема на самом деле очень серьезная. В реальном сайте у вас чаще всего будет несколько файлов с вашими скриптами, кроме того, вы будете подключать какие-то сторонние плагины. В этом случае переменные и функции одного файла могут конфликтовать с переменными и функциями другого файла.