如何在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 。 希望它有帮助!