如何在JavaScript中声明一个全局variables?

我怎样才能在JavaScript中声明一个全局variables?

如果您必须在生产代码中生成全局variables(应该避免),请务必 明确声明:

window.globalVar = "This is global!"; 

虽然可以通过仅省略var (假定不存在同名的局部variables)来定义全局variables,但这样做会生成隐式的全局variables,这是一件坏事,会在严格模式下产生错误。

如果这是您要使用这个variables的唯一应用程序,Felix的方法非常好。 但是,如果您正在编写jQuery插件,请考虑jquery对象下需要的“namespacing”(稍后引用的详细信息…)variables和函数。 例如,我目前正在研究一个叫做miniMenu的jQuerypopup菜单。 因此,我已经在jQuery下定义了一个“命名空间” miniMenu ,并且把所有东西放在那里。

我在讨论javascript命名空间时使用引号的原因是,它们并不是正常意义上的真正命名空间。 相反,我只是使用一个javascript对象,并把我所有的函数和variables作为这个对象的属性。

另外,为了方便起见,我通常将plugin命名空间与一个i命名空间进行子空间分隔,这些命名空间只能在插件内部使用,以便将其从插件的用户中隐藏起来。

这是如何工作的:

 // An object to define utility functions and global variables on: $.miniMenu = new Object(); // An object to define internal stuff for the plugin: $.miniMenu.i = new Object(); 

现在我只需要$.miniMenu.i.globalVar = 3或者$.miniMenu.i.parseSomeStuff = function(...) {...}每当我需要保存一些东西,我仍然保持它的全局命名空间。

用jQuery你可以做到这一点,不pipe声明在哪里:

 $my_global_var = 'my value'; 

并将随处可用。 我用它来制作快速图像画廊,当图像在不同的地方传播时,就像这样:

 $gallery = $('img'); $current = 0; $gallery.each(function(i,v){ // preload images (new Image()).src = v; }); $('div').eq(0).append('<a style="display:inline-block" class="prev">prev</a> <div id="gallery"></div> <a style="display:inline-block" class="next">next</a>'); $('.next').click(function(){ $current = ( $current == $gallery.length - 1 ) ? 0 : $current + 1; $('#gallery').hide().html($gallery[$current]).fadeIn(); }); $('.prev').click(function(){ $current = ( $current == 0 ) ? $gallery.length - 1 : $current - 1; $('#gallery').hide().html($gallery[$current]).fadeIn(); }); 

提示 :在此页面的控制台中运行这整个代码;-)

以下是其他函数可以访问的全局variables的基本示例。 这里是一个生动的例子: http : //jsfiddle.net/fxCE9/

 var myVariable = 'Hello'; alert('value: ' + myVariable); myFunction1(); alert('value: ' + myVariable); myFunction2(); alert('value: ' + myVariable); function myFunction1() { myVariable = 'Hello 1'; } function myFunction2() { myVariable = 'Hello 2'; } 

如果你正在jquery ready()函数中做这个,那么确保你的variables和你的其他函数一起在ready()函数中。

在函数之外声明该variables

 function dosomething(){ var i = 0; // can only be used inside function } var i = ''; function dosomething(){ i = 0; // can be used inside and outside the function } 

最好的方法是使用closures ,因为window对象变得非常混乱的属性。

HTML

 <!DOCTYPE html> <html> <head> <script type="text/javascript" src="init.js"></script> <script type="text/javascript"> MYLIBRARY.init(["firstValue", 2, "thirdValue"]); </script> <script src="script.js"></script> </head> <body> <h1>Hello !</h1> </body> </html> 

init.js (基于这个答案 )

 var MYLIBRARY = MYLIBRARY || (function(){ var _args = {}; // private return { init : function(Args) { _args = Args; // some other initialising }, helloWorld : function(i) { return _args[i]; } }; }()); 

的script.js

 // Here you can use the values defined in the html as if it were a global variable var a = "Hello World " + MYLIBRARY.helloWorld(2); alert(a); 

这是plnkr 。 希望它有帮助!