Как объявить глобальную переменную в a.JS файл
мне нужно несколько глобальных переменных, которые мне нужны во всех .js
файлы.
например, рассмотрим следующие 4 файла:
global.js
js1.js
js2.js
js3.js
есть ли способ, что я могу объявить 3 глобальные переменные в global.js
и получить доступ к ним в любом из других 3 .js
файлы, учитывая, что я загружаю все вышеуказанные 4 файла в HTML-документ?
кто-то может пожалуйста, скажите мне, возможно ли это или есть работа для достижения этого?
5 ответов
просто определите свои переменные в global.js вне области действия функции:
// global.js
var global1 = "I'm a global!";
var global2 = "So am I!";
// other js-file
function testGlobal () {
alert(global1);
}
чтобы убедиться, что это работает, вы должны включить/ссылку на global.js прежде чем пытаться получить доступ к любым переменным, определенным в этом файле:
<html>
<head>
<!-- Include global.js first -->
<script src="/YOUR_PATH/global.js" type="text/javascript"></script>
<!-- Now we can reference variables, objects, functions etc.
defined in global.js -->
<script src="/YOUR_PATH/otherJsFile.js" type="text/javascript"></script>
</head>
[...]
</html>
вы можете, конечно, связать теги скрипта непосредственно перед закрывающим -тегом, если вы не хотите, чтобы загрузка js-файлов прерывала начальную загрузку страницы.
рекомендуется:
window.greeting = "Hello World!"
вы можете получить к нему доступ в любой функции:
function foo() {
alert(greeting); // Hello World!
alert(window["greeting"]); // Hello World!
alert(window.greeting); // Hello World! (recommended)
}
этот подход предпочтителен по двум причинам.
намерение явным. Использование
var
ключевое слово может легко привести к объявлению globalvars
которые должны были быть локальными или наоборот. Такого рода переменная область видимости является точкой путаницы для многих разработчиков Javascript. Поэтому, как правило, я убеждаюсь, что все объявления переменных начинается с ключевого словаvar
или префиксwindow
.вы стандартизируете этот синтаксис для чтения переменных таким образом, а это означает, что локально область
var
не разбивает глобальныйvar
или наоборот. Например, то, что здесь происходит, неоднозначно:
greeting = "Aloha";
function foo() {
greeting = "Hello"; // overrides global!
}
function bar(greeting) {
alert(greeting);
}
foo();
bar("Howdy"); // does it alert "Hello" or "Howdy" ?
однако это намного чище и менее подвержено ошибкам (вам действительно не нужно помнить все переменные правила области видимости):
function foo() {
window.greeting = "Hello";
}
function bar(greeting) {
alert(greeting);
}
foo();
bar("Howdy"); // alerts "Howdy"
вы пробовали?
если вы:
var HI = 'Hello World';
на global.js
. А потом сделай:
alert(HI);
на js1.js
он предупредит его хорошо. Вы просто должны включить global.js
перед остальными в HTML-документе.
единственная загвоздка в том, что вы должны объявить его в области окна (не внутри функции).
вы могли бы просто nix var
часть и создавать их таким образом, но это не хорошая практика.
Как упоминалось выше, есть проблемы с использованием самой верхней области в файле сценария. Вот еще одна проблема: файл сценария может быть запущен из контекста, который не является глобальным контекстом в некоторой среде выполнения.
было предложено назначить глобальное значение window
напрямую. Но это тоже выполнить-зависит от времени и не работает в узле etc. Это показывает, что портативное глобальное управление переменными нуждается в тщательном рассмотрении и дополнительных усилиях. Возможно, они исправят это в будущих версиях ECMS!
на данный момент я бы рекомендовал что-то вроде этого для поддержки надлежащего глобального управления для всех сред выполнения:
/**
* Exports the given object into the global context.
*/
var exportGlobal = function(name, object) {
if (typeof(GLOBAL) !== "undefined") {
// Node.js
GLOBAL[name] = object;
}
else if (typeof(window) !== "undefined") {
// JS with GUI (usually browser)
window[name] = object;
}
else {
throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported.");
}
};
// export exportGlobal itself
exportGlobal("exportGlobal", exportGlobal);
// create a new global namespace
exportGlobal("someothernamespace", {});
это немного больше ввода, но это делает ваше глобальное управление переменными будущим.
отказ от ответственности: часть этой идеи пришла ко мне, когда я смотрел на предыдущие версии stacktrace.js. Я считаю, можно также использовать Bower или другие инструменты, чтобы получить более надежный и менее hackish обнаружение среды выполнения.
Да, вы можете получить к ним доступ. Вы должны объявить их в "публичном пространстве" (вне любых функций) как:
var globalvar1 = 'value';
вы можете получить к ним доступ позже, также в других файлах.