Можно ли сделать глобальную переменную в JAVASCRIPT? [Дубликат]

0

У меня есть следующий html-код. Я создаю объект клиента. (Контрактор в custForATM.js):

<html>
    <script src="js/custForATM.js"></script>
    <script src="js/ATM.js"></script>   
    <script type="text/javascript">
        var customer = new CustomersATM("300321758","1234","Eric");
    </script>
<body>
    <button onclick="changeID()">Add One to Customer ID</button>
</body>
</html>

Функция changeID() находится в другом JS файле (ATM.js). Я хочу, чтобы этот щелчок на этой кнопке добавит ссылку "Заказчик" переменной на функцию changeID. Является ли это возможным? (Я знаю, что могу переместить этот метод в html файл, но я не хочу.

Благодарю!!

  • 1
    как выглядит atm.js?
  • 1
    Вы хотите иметь <script> в <head> ?
Показать ещё 1 комментарий
Теги:

4 ответа

3
Лучший ответ

В глобальном масштабе (aka "window") переменные являются глобальными.

Проверь это:

//this is global because it is in the global scope (the window)
var foo = 'stuff';
//because it is global (window) you can also access it like this:
console.log(window.foo); //'stuff'

Теперь вы можете получить доступ к foo любом месте. Стоит отметить, что глобалы не являются лучшей практикой - так что ознакомьтесь с объектно-ориентированным программированием (принципы SOLID).

Если вы находитесь в другой области видимости (как функция) и не используете ключевое слово var для создания переменной, переменная будет глобальной:

function someFunction() {
  someVariable = 'stuff'; //this created a global variable! (or references an existing one)
  //you could also assign it to window:
  window.someVariable = 'stuff';
  //both are the same thing!
}

Inline js (onclick в вашем html) не является хорошей практикой. Вместо этого вы можете следовать хорошей практике и использовать javascript для регистрации события click:

//get reference to button
var myBtn = document.getElementById('myBtn');

//add click function
myBtn.addEventListener('click', function(event) {
  myFunction();
});

function myFunction() {
  console.log(foo); //'stuff' 
}

Вот демонстрационный пример всего этого: http://jsbin.com/OmUBECaw/1/edit

Просто отметьте, что вам нужно будет получить ссылки на элементы после их загрузки в dom. Лучше всего включать ваши скрипты непосредственно перед концом тела, а не в голову, например:

  <!-- scripts here! -->
  <script></script>
</body>

Если вы должны держать скрипты в head, тогда вам нужно будет поместить ваш javascript-код в функцию для запуска загрузки окна:

window.addEventListener('load', function() {
  //code here!
});
5

В вашем примере клиент является глобальной переменной. Вы должны быть в состоянии сделать следующее:

<button onclick="changeID(customer)">Add One to Customer ID</button>
  • 0
    Спасибо! и если я изменю «клиента» в функции. (добавьте 1 к id) это тоже изменится? или только в области видимости функции changeID. Спасибо!!
  • 0
    переменная customer является глобальной для всех файлов JS
Показать ещё 3 комментария
2

Вы можете просто вставить это. Но по мере того, как ваша логика становится более сложной, в конечном итоге имеет смысл разбить обработку событий и на главный скрипт.

Вы можете связать событие window.onload, а затем найти элемент кнопки (предпочтительно с помощью идентификатора элемента), а затем связать событие onlcick, которое отправит параметр.

<html>
<script src="js/custForATM.js"></script>
<script src="js/ATM.js"></script>   
<script type="text/javascript">
    var customer = new CustomersATM("300321758","1234","Eric");
    window.onload = function(){
     document.getElementById("changeId").onclick = function(){
      changeID(customer);
     };
    };
</script>
<body>
 <button id="changeId">Add One to Customer ID</button>
</body>
</html>
-5

Это должно сработать. (Удаление "var" делает переменным глобальным)

<html>
<script src="js/custForATM.js"></script>
<script src="js/ATM.js"></script>   

<script type="text/javascript">

customer = new CustomersATM("300321758","1234","Eric");

 </script>
 <body>

<button onclick="changeID(customer)">Add One to Customer ID</button>
</body>
</html>
  • 4
    это было глобально с вар тоже.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню