2010-11-22 58 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