在网页中我在哪里声明全局JavaScript变量?

在网页中我在哪里声明全局JavaScript变量?,javascript,global-variables,Javascript,Global Variables,我需要在哪里放置一段JavaScript代码,用于初始化一个变量,该变量必须对页面中执行的所有代码可见?(例如,元素上的事件处理程序需要访问此变量) 您可以在任何函数外执行,也可以在函数中执行,而无需使用'var'关键字。在任何其他脚本(可能位于页面顶部)之前分配该值,以便脚本可以读取该值 您也可以将其放在包含的JS文件中,但将其放在页面上通常更有用,因为您可以轻松查看全局值,并且可以通过服务器端代码对每个页面进行修改。同时尽量避免在正文中指定全局变量,这可能会造成混乱,并且更难阅读 <h

我需要在哪里放置一段JavaScript代码,用于初始化一个变量,该变量必须对页面中执行的所有代码可见?(例如,元素上的事件处理程序需要访问此变量)

您可以在任何函数外执行,也可以在函数中执行,而无需使用'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>

变量numberOfDucks=1000;//全球的
函数some_函数(){
//这里有很多鸭子
警报(鸭子数量);
//直到通过使用“var”关键字定义局部变量来屏蔽它
var myLocal=0;//是本地
anotherGlobal=0;//是全局
}
//可能是其他脚本
在函数中定义全局(隐含全局)不是一个好主意,因为它会造成很多混乱。


<head>
<script>
    var b = 0;
</script>
<script src="...">
</head>
<body>
    ...
</body>
var b=0; ...
在任何函数之外声明变量,这样它就会成为全局变量

(function() {
  var local = 5;
})();
下面是一个全局变量的示例。第一个函数使用全局变量,但第二个函数使用具有相同名称的局部变量来屏蔽全局变量

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>

不使用全局变量的唯一方法是在函数范围内使用
var
关键字。其他任何东西都是全局变量

(function() {
  var local = 5;
})();
无论函数是文本还是函数定义,它都是某种类型的函数

全局变量示例:

1

var global = 5; 
上述内容不在函数范围内,因此即使使用了
var
,也是全局的。

2.

(function() {
   global = 5;
})();
在上面,没有使用
var
,因此它成为一个隐含的全局变量。

3.

function foo(){}
(function() {
   var local = global = 5;
})();
window.foo = 5;
this.x = 5;
with ( window ) { name = 'john'; }
foo
未在另一个函数中定义,也未分配给对象键以使其全局可访问。

4.

function foo(){}
(function() {
   var local = global = 5;
})();
window.foo = 5;
this.x = 5;
with ( window ) { name = 'john'; }
使用
var
执行多个赋值时,只有第一个变量变为局部变量。。。所以
global
是一个全局变量,等于5

5.

function foo(){}
(function() {
   var local = global = 5;
})();
window.foo = 5;
this.x = 5;
with ( window ) { name = 'john'; }
窗口添加前缀。
是在浏览器上下文中定义全局变量的一种显式方法

6.

function foo(){}
(function() {
   var local = global = 5;
})();
window.foo = 5;
this.x = 5;
with ( window ) { name = 'john'; }
默认情况下,在浏览器中,
指向DOMWindow,除非您使用的方法附加到的对象不是
窗口
。这和#5一样。请注意,如果使用XMLHttpRequest之类的方法,则上下文是窗口的上下文

7.

function foo(){}
(function() {
   var local = global = 5;
})();
window.foo = 5;
this.x = 5;
with ( window ) { name = 'john'; }
如果使用
with
语句,并且未引用已具有属性的对象,则会定义一个全局变量。一般情况下,最好避免将
关键字一起使用

结论:

就我个人而言,我会将我的代码保存在一个匿名函数作用域中,只在需要时显式地声明globals

(function() {

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

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

在上面,我定义了
调控器
状态
变量,它们是函数的局部变量。我想将
president
明确定义为一个全局变量。这样,我就不会对我定义的哪些变量是全局变量感到困惑,因为我明确地用
窗口作为它们的前缀。

您可以将该变量放在页面的开头(如果必须使其在任何地方都可见,则放在全局范围内),但我建议两件事

1) 由于必须打开脚本块,请避免在页面正文中声明它,因为脚本会阻止渲染。所以把它放在

2) 避免创建简单的var,而是使用名称空间,这样可以减少标识符冲突的风险

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

但是,对于提供的帮助我理解各种情景的有用示例,全球风险值仍然是1