Почему не вызывается функция с export и без него если в теге script указан type="module"?

Когда вы используете атрибут type="module" в теге <script>, вы объявляете, что файл скрипта должен загружаться как модуль в стиле ECMAScript. В модульной системе JavaScript каждый скрипт имеет свою собственную область видимости, что означает, что код, определенный в одном модуле, по умолчанию не доступен в другом модуле.

Когда объявляется функция (или другие переменные) и необходимо использовать ее в другом модуле, вы должны использовать ключевое слово export, чтобы сделать ее доступной извне. Это означает, что вам нужно использовать конструкцию типа export function myFunction() { ... }, чтобы экспортировать функцию из модуля.

Если вы определяете функцию без ключевого слова export в модульном скрипте (с type="module"), эта функция будет видима только в пределах своего модуля и не будет доступна извне. Поэтому, если вы пытаетесь вызвать функцию из другого модуля, которая не была экспортирована, возникает ошибка, потому что эта функция не доступна для импорта.

Чтобы вызвать функцию из другого модуля в модульной системе JavaScript, вам нужно экспортировать ее в одном модуле с помощью export, а затем импортировать ее в другом модуле с помощью ключевого слова import.

Пример:

Модуль 1:

// Определение функции, которую необходимо экспортировать
function myFunction() {
   console.log("Hello from myFunction!");
}

// Экспорт функции
export { myFunction };

Модуль 2:

// Импорт функции из другого модуля
import { myFunction } from './module1.js';

// Вызов импортированной функции
myFunction(); // Выведет "Hello from myFunction!" в консоль

Таким образом, включение type="module" в тег <script> обозначает, что ваш скрипт будет загружен как модуль, и вам необходимо использовать экспорт и импорт, чтобы обеспечить правильную работу с функциями и переменными между модулями.