如何在.js文件中声明一个全局variables

我需要在所有.js文件中需要一些全局variables。

例如,考虑以下4个文件:

  1. global.js
  2. js1.js
  3. js2.js
  4. js3.js

有没有办法,我可以在global.js声明3个全局variables,并在任何其他3个.js文件中访问它们,考虑到我将所有上述4个文件加载到HTML文档中?

有人可以告诉我,如果这是可能的或是否有工作要实现这一目标?

只需在函数范围外的global.js中定义你的variables:

 // global.js var global1 = "I'm a global!"; var global2 = "So am I!"; // other js-file function testGlobal () { alert(global1); } 

为了确保工作正常,在尝试访问该文件中定义的任何variables之前,必须包含/链接到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文件的加载中断初始页面加载,那么您可以在closures<body> -tag之前链接脚本标记。

推荐的方法是:

 window.greeting = "Hello World!" 

您可以在任何function中访问它:

 function foo() { alert(greeting); // Hello World! alert(window["greeting"]); // Hello World! alert(window.greeting); // Hello World! (recommended) } 

由于两个原因,这种方法是优选的。

  1. 意图是明确的。 var关键字的使用可以很容易地导致声明为本地的全局vars ,反之亦然。 对于很多Javascript开发人员来说,这种variables范围是一个混乱点。 因此,作为一般规则,我确保所有variables声明都以关键字var或前缀window

  2. 你用这种方法来标准化这个语法来读取variables,这意味着一个局部范围的variables不会打断全局variables,反之亦然。 例如,这里发生的是模棱两可的:

  greeting = "Aloha"; function foo() { greeting = "Hello"; // overrides global! } function bar(greeting) { alert(greeting); } foo(); bar("Howdy"); // does it alert "Hello" or "Howdy" ? 

但是,这是更清洁,更不容易出错(你不需要记住所有的variables范围规则):

  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它会提醒它很好。 你只需要在HTML文档中包含global.js

唯一的问题是你必须在窗口的范围内声明它(不在任何函数中)。

你可以将var部分用nix来创build,但这不是一个好习惯。

如上所述,在脚本文件中使用最顶级的范围存在问题。 这是另一个问题:脚本文件可能是从某个运行环境中不是全局上下文的上下文运行的。

已经提出直接把全局分配给window 。 但是这也是运行时间依赖的 ,并不适用于Node等。这表明便携式全局variablespipe理需要仔细考虑和额外的努力。 也许他们会在未来的ECMS版本中修复它!

现在,我会推荐一些类似的东西来支持适用于所有运行环境的全局pipe理:

 /** * 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", {}); 

这有点多打字,但它使您的全球variablespipe理面向未来。

免责声明:在查看以前版本的stacktrace.js时,这个想法的一部分来了。 我认为,还可以使用Bower或其他工具来获得更可靠和更less的运行时环境的黑客检测。

是的,你可以访问它们。 你应该在“公共空间”(在任何函数之外)声明它们:

 var globalvar1 = 'value'; 

您可以稍后访问它们,也可以在其他文件中访问它们。