Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   два скрипта не видят друг друга (https://javascript.ru/forum/misc/75026-dva-skripta-ne-vidyat-drug-druga.html)

Самовар 27.08.2018 07:17

два скрипта не видят друг друга
 
Есть два файла .js, подключенные в один хтмл документ
<script src="js/generateGameField.js"></script>
<script src="js/script.js"></script>


Функции объявленные в одной файле не доступны в другом. Искал информацию, но кроме танцев с бубнами ничего путного и простого не нашел. Проблема на мой взгляд обязательна должна иметь простое и элегантное решение, ну просто не может быть такого, что два скрипта не видят друг друга, располагаясь в одном хтмл документе.

destus 27.08.2018 08:32

window.func = function() {}

Самовар 27.08.2018 08:37

и куда это? Так объявлять функции, которые нужны в других скриптах?

Aetae 27.08.2018 11:51

Видят прекрасно. Только функции должны быть объявлены в файле подключаемом первым.

Самовар 27.08.2018 13:16

то есть просто объявить все функции в файле js/generateGameField.js и всё будет работать? Кстати заметил, что функция из первого скрипта видна во втором, а из третьего второй не видит. А есть способ, чтобы не только из первого скрипта работало, иначе при более-менее нормальном проекте этот скрипт окажется просто мусорником всех функций, где черт ногу сломает

Aetae 27.08.2018 13:17

Нет. Всё в js работает после загрузки по порядку. Из третьего виден первый и второй, из четвёртого первый, второй и третий, итд. Просто потому, что когда запускается второй - третий ещё только летит по сети.

Ещё можно поставить обрабочик на событие загрузки и тогда неважно какой там по порядку скрипт. Однако load срабатыват только после загрузки всего, в том числе и картинок, что может вызвать заметную задержку.

Самовар 27.08.2018 13:22

ясно, спасибо. А обойти такую последовательность никак?

Aetae 27.08.2018 13:27

Объединить всё в один файл. Для этого есть разные инструменты.
Либо использовать события загрузки, нативные или самописные и запускать основной код только когда подгрузится всё нужное.

Rise 27.08.2018 16:07

Цитата:

Сообщение от Самовар
А обойти такую последовательность никак?

Ну модули есть еще, подключается один файл, а остальные им тянутся по необходимости.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="module" src="app.js"></script>
</head>
<body>
    
</body>
</html>

// app.js
import { x } from './a.js';
import { y } from './b.js';
console.log(y(x));

// a.js
let x = 7;
export { x };

// b.js
import { z } from './c.js';
let y = (n) => n * z;
export { y };

// c.js
let z = 5;
export { z };

MC-XOBAHCK 27.08.2018 22:50

Цитата:

Сообщение от Самовар
Функции объявленные в одной файле не доступны в другом.

У меня когда то была подобная проблема, возможно у вас такое.
У меня было что код был внутри функции ожидающей полной загрузки хтмл-документа, типа:
window.onload = {
   // тут код
}

и я не мог достучаться до функций внутри. Пришлось убрать window.onload


Часовой пояс GMT +3, время: 14:17.