2010-11-22 89 views

回答

8

您可以不使用任何函数,也可以在不使用'var'关键字的情况下执行函数。在任何其他脚本(可能位于页面的顶部)之前分配它,以便脚本可以读取该值。

您也可以将它放在一个包含的JS文件中,但将它放在页面上通常更具有可用性,因为您可以轻松地看到全局值,并且可以通过服务器端代码修改每个页面的值。同时尽量避免在正文中分配全局变量,它可能会让人产生困惑,并且很难阅读。

<head> 
    <script> 
     var numberOfDucks = 1000; // Global 

     function some_function() { 
      // numberOfDucks is accessible here 
      alert (numberOfDucks); 
      // until you mask it by defining a local variable using the 'var' keyword 
      var myLocal = 0; // is a local 
      anotherGlobal = 0; // is a global 
     } 
    </script> 

    <script> 
     // potentially some other script 
    </script> 

    <script src="even_more_script.js"> 
</head> 

在函数中定义一个全局(隐含全局)不是一个好主意,因为它会引起很多争议。

0
<head> 
<script> 
    var b = 0; 
</script> 
<script src="..."> 
</head> 
<body> 
    ... 
</body> 
1

声明变量与任何你的函数,这样它就成为一个全局变量。

下面是一个全局变量的例子。第一个函数使用全局函数,但第二个函数使用同名的局部变量来掩盖全局。

var globalVar = 1; 

function testFunc1() { 
    globalVar = 2; //Updates the global variable 
} 

function testFunc2() { 
    var globalVar = 5; // This variable masks the global and only updates within the scope of this function 
    globalVar = 3; 
} 

此外,您提到该代码段必须在任何其他引用之前初始化全局。为此,我建议您在您的元素中尽可能使用其他JavaScript引用之前,将脚本块或引用放置到您的JavaScript文件中。如果您有其他JavaScript文件将依赖于全局变量,那么您可能希望确保在页面的其余部分先使用defer属性加载之前不加载它们。请参阅以下内容:

<script src="dependant.js" type="text/javascript" defer="defer"></script> 

另一种方法是在初始脚本加载后动态添加从属脚本。可以按如下方式做到这一点使用一些像jQuery:

$(window).load(function() { 
    $.getScript('dependant.js'); 
}); 
24

办法没有一个全局变量是使用关键字var的功能范围。其他任何东西都是全局变量。

(function() { 
    var local = 5; 
})(); 

如果函数是文字或函数定义不要紧,它是某种类型的函数。

全局变量的例子:


var global = 5; 

以上是不在函数范围,因而即使使用var全球。

2。

(function() { 
    global = 5; 
})(); 

在上述中,没有var被使用,所以它成为一个隐含的全球性的。

3.

function foo(){} 

foo没有另一个函数的内部定义或分配到一个对象键,以便它的全球可访问的。

4.

(function() { 
    var local = global = 5; 
})(); 

var做多的任务,只有第一个变量变成本地...所以global是一个全局变量,相当于5

5.

window.foo = 5; 

前缀window.是在浏览器上下文中定义全局变量的显式方式。

6.

this.x = 5; 

默认情况下在浏览器中,this点存在domWindow,除非你是在附加到一个对象,它是不是window的方法。这与#5是一样的。请注意,如果您使用XMLHttpRequest之类的方法,则上下文就是窗口。

7.

with (window) { name = 'john'; } 

如果使用with声明,你不引用已具有属性的对象,有一个全局变量定义。一般来说,最好避免使用with关键字。

结论:

就个人而言,我会保持我的代码在匿名函数的范围,并且只我需要显式声明的全局变量。

(function() { 

    var governor = 'Schwarzenegger', 
     state = 'California'; 

    window.president = 'Obama'; 
})(); 

在上面的,我定义governorstate变量,他们是当地到我的功能。我想明确定义president作为全局变量。这样,我不会对我定义为全局变量的变量感到困惑,因为我明确地以window.为前缀。

3

你可以变量放置在页面的开始(在全球范围内,如果你要让它随处可见),但我建议两件事

1),因为你要打开一个脚本块,避免因为脚本阻止了渲染,所以在页面内部声明它。所以就把它只是</head>

2)避免之前创建一个简单的变种,但使用一个命名空间代替你减少标识符碰撞

<script> 
var YOUR_APP_NS = {}; 
YOUR_APP_NS.yourvar = .... 
</script> 

这是一个很好的做法,以风险为不污染全局范围。如果你需要一些公共变种通过这种方式,你可以只写

YOUR_APP_NS.yourvar1 = .... 
YOUR_APP_NS.yourvar2 = .... 
YOUR_APP_NS.yourvarN = .... 

但全局变量仍然是1

相关问题