如何在JavaScript中声明全局变量?

How to declare a global variable in JavaScript?

如何在javascript中声明全局变量?


如果必须在生产代码中生成全局变量(应避免这种情况),请始终明确声明它们:

1
window.globalVar ="This is global!";

虽然可以通过省略var来定义全局变量(假设没有同名的局部变量),但这样做会生成隐式全局,这是一件糟糕的事情,并且会在严格模式下生成错误。


如果这是您将要使用这个变量的唯一应用程序,那么Felix的方法非常好。但是,如果您正在编写jquery插件,请考虑jquery对象下所需的变量和函数的"namespacing"(稍后将详细介绍引号…)。例如,我目前正在开发一个jquery弹出菜单,我称之为minimenu。因此,我在jquery下定义了一个"名称空间"miniMenu,并将所有内容放在那里。

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

此外,为了方便起见,我通常使用i名称空间对插件名称空间进行子空间划分,以便只在插件内部使用的内容,以便对插件的用户隐藏该名称空间。

这就是它的工作原理:

1
2
3
4
// 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,无论声明在哪里,都可以这样做:

1
$my_global_var = 'my value';

在任何地方都可以使用。我用它来制作快速的图像库,当图像在不同的地方传播时,就像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$gallery = $('img');
$current = 0;

$gallery.each(function(i,v){
    // preload images
    (new Image()).src = v;
});
$('div').eq(0).append('prev  next');
$('.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();
});

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


下面是一个全局变量的基本示例,其余函数可以访问该变量。下面是一个实例:http://jsfiddle.net/fxce9/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()函数中执行此操作,请确保变量与其他函数一起位于ready()函数中。


在函数之外声明变量

1
2
3
4
5
6
7
8
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript" src="init.js">
    <script type="text/javascript">
      MYLIBRARY.init(["firstValue", 2,"thirdValue"]);
   
    <script src="script.js">
  </head>

  <body>
    Hello !
  </body>    
</html>

init.js(基于此答案)

1
2
3
4
5
6
7
8
9
10
11
12
13
var MYLIBRARY = MYLIBRARY || (function(){
    var _args = {}; // private

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

JScript

1
2
3
4
// 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。希望有帮助!