Как объявить глобальную переменную в файле. js
мне нужно несколько глобальных переменных, которые мне нужны во всех .js файлы.
например, рассмотрим следующие 4 файла:
global.jsjs1.jsjs2.jsjs3.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>вы можете, конечно, связать теги скрипта непосредственно перед закрытием -tag, если вы не хотите, чтобы загрузка js-файлов прерывала начальную загрузку страницы.
рекомендуется:
window.greeting = "Hello World!"вы можете получить к нему доступ в любой функции:
function foo() { alert(greeting); // Hello World! alert(window["greeting"]); // Hello World! alert(window.greeting); // Hello World! (recommended) }этот подход предпочтителен по двум причинам.
намерение явным. Использование
varключевое слово может легко привести к глобальной объявленииvarsкоторые должны были быть локальными или наоборот. Такого рода переменная область видимости является точкой путаницы для многих разработчиков 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напрямую. Но это тоже выполнить-зависит от времени и не работает в узле и т. д. Это показывает, что портативное управление глобальными переменными требует некоторого тщательного рассмотрения и дополнительных усилий. Может быть, они исправят это в будущих версиях 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 или другие инструменты, чтобы получить более надежный и менее хакерское обнаружение среды выполнения.
Да, вы можете получить к ним доступ. Вы должны объявить их в " публичном пространстве "(вне любых функций) как:
var globalvar1 = 'value';вы можете получить к ним доступ позже, также в других файлах.
Comments