Не удается получить доступ к глобальной переменной в JavaScript? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь получить доступ к одному файлу из другого файла.Вот что у меня есть:

<!DOCTYPE html>
<html lang="en">
  <head>
  </head>

  <body>
    <button id="btn">Global</button>
    <script src="/test.js"></script>
    <script src="/testpass.js"></script>
  </body>
</html>

test.js:

export var globalVariable = {
    output: "test this"
 };

testpass.js:

import { globalVariable } from './test.js'
document.getElementById("btn").addEventListener("click", function(){
  alert(globalVariable.output);
});

Ничего не происходит.Я также попытался сделать

var globalVariable = {
    output: "test this"
 };

, а затем просто получить к нему доступ из другого файла, как показано в этом ответе: Вызвать переменные из одного файла javascript в другой , но это не сработало.Пробовал экспортировать его, как указано в этом ответе: Можно ли получить доступ к переменным из другого файла? , но безуспешно.Я использую возвышенный текст и vue.js, и он не работает для них обоих.

Кроме того, если я делаю что-то вроде этого:

import { globalVariable } from '.test.js'
document.getElementById("btn").addEventListener("click", function(){
  alert("Not printing the globalVariable here");
});

весь файл javascript, похоже, не работаети не работает вообще при вызове в файле HTML.

1 Ответ

0 голосов
/ 24 октября 2018

Вы должны получить сообщение об ошибке от движка JavaScript браузера в веб-консоли.Чтобы использовать import и export, вы должны обрабатывать свой код как модуль .Ваши script теги этого не делают, они обрабатывают код как просто script .Чтобы рассматривать testpass.js как модуль, вы должны использовать type="module":

<script src="/testpass.js" type="module"></script>

Нет необходимости перечислять test.js, testpass.js загрузит его.Итак:

<!DOCTYPE html>
<html lang="en">

<head>
</head>

<body>
    <button id="btn">Global</button>
    <script src="/testpass.js" type="module"></script>
  </body>
</html>

К сожалению, мы не можем показать модули в фрагментах стека SO, но если вы сделаете эти изменения, этот пример кода и коробки - это то, что вы в итоге (кроме меня, я изменилsrc="/testpass.js" до src="./testpass.js").


Обратите внимание, что globalVariable не является глобальной переменной (которая является Good Thing ™).Это локальная переменная в test.js, которую она экспортирует.Любой другой модуль может импортировать его, но он не является глобальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...