TLDR; Перед добавлением type="module"
initMap
находился в глобальной области видимости (то есть для объекта window
), поэтому, когда скрипт Google Maps завершил загрузку, он сказал: «Эй, время выполнения! Выполните функцию с именем 'initMap' для меня" и Движок искал его в текущей области видимости, нашел initMap
и выполнил его.
Модули - это все о инкапсуляции, поэтому все внутри них является приватным, если не экспортировано (это направление, которое вы уже начали изучение). Однако экспорт - это только половина решения - вам также необходимо импортировать эту функцию. Я работаю в основном в кодовых базах, где вы делаете связывание с веб-пакетом, и вы обычно экспортируете кучу вещей в свои модули, а затем импортируете их так: import { myFunction } from "./path/to/module.js"
. Я не понимаю, как вы могли бы использовать это в этой <script>
-in- HTML настройке, хотя вместо этого вы могли бы добавить initMap
к window
объекту вручную, чтобы среда выполнения находила его, когда Google Карты запрашивают это.
// inside main.js
function initMap() {
console.log("Hey! This is inside a callback passed to Google Maps script");
}
// this is IIFE - i.e. runs immediately
(function() {
window.initMap = initMap;
})();