@justifycontent

Почему скрипты знают друг о друге?

У меня есть 4 js файла, и каждый файл все знает про остальных, т.е. переменная, объявленная в auth.js будет видна в menu.js, так и должно быть? А когда я хочу создать переменную и дать ей имя, которое используется в другом скрипте, то мне выдает, что она уже объявлена, почему каждый скрипт знает все про другие? LMekMxD2Rds.jpg?size=164x109&quality=96&sign=0109a59dc5dca0ca785d0c5c015bd0bc&type=album
  • Вопрос задан
  • 391 просмотр
Решения вопроса 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если вы эти файлы подключаете на одной странице, то глобальная область видимости у них одна на всех. Соответственно и переменные, размещаемые в глобальной области, будут общими.
Ответ написан
Комментировать
@mletov
Почитайте про замыкания, iife, модули и области видимости.

Если вы в этих скриптах ничего не делали специально, чтобы эту область видимости ограничить, то почему бы им друг друга и не видеть, это дефолтное поведение.

И это логично, иначе как бы подключались различные библиотеки, тот же jquery, например
Ответ написан
Комментировать
Seasle
@Seasle Куратор тега JavaScript
Потому что все скрипты выполняются в глобальной области видимости - window. Хотите ограничить область видимости каждого скрипта, тогда либо IIFE, либо паттерн "модуль" (что по сути тоже IIFE).
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Допустим, подключены два файла:
// auth.js
var myAuth = "secret";

// logic.js
function logic() {
 console.log(myAuth);
}

Когда оба файла включены в страницу, это то же самое, как склеить их содержимое и вставить прямо в тело страницы:
<script>
var myAuth = "secret";
function logic() {
 console.log(myAuth);
}
</script>
Поэтому все друг друга видят, слышат и дружат )
Просто размещение кода в отдельном файле не изолирует его код от прочего.

Распространённая практика во время разработки держать код по разным файлам, логически разделяя. А для продакшн собирать весь код в один файл (или несколько, чтобы куски сборки сделать полегче).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы