2013-07-25 43 views
0

JavaScript通常遵循函數範圍,即變量只能在聲明它們的函數內訪問。破解JavaScript的方法範圍

打破此約定並使該變量可在函數範圍外訪問的方法之一是使用全局窗口對象 (例如,

window.myVar = 123; 

我的問題是有沒有其他方法在JavaScript/jQuery使變量可以訪問函數範圍之外?

+0

基本上,用'var'聲明的每個變量都是本地的。如果省略它,您可以將變量的值設置爲更高的範圍(全局或非全局),或者如果該變量不存在,則將其設置爲全局變量。 –

+0

我不完全理解你的問題。你不能只聲明一個全局變量嗎? – yaoxing

+0

你可以檢查這個問題http://stackoverflow.com/questions/500431/javascript-variable-scope?rq=1 –

回答

6

沒有變量聲明,沒有。你可以明顯的外部範圍聲明一個變量,以便它可以訪問到所有子孫範圍:

var a; // Available globally 
function example() { 
    a = "hello"; // References a in outer scope 
} 

如果你不是在嚴格模式下,你可以簡單地刪除var關鍵字。這相當於你的例子:

// a has not been declared in an ancestor scope 
function example() { 
    a = "hello"; // a is now a property of the global object 
} 

這是非常不好的做法。如果函數在嚴格模式下運行時,它會拋出一個引用錯誤:

function example() { 
    "use strict"; 
    a = "hello"; // ReferenceError: a is not defined 
} 
+0

任何原因,這是downvoted? –

0

正如你寫,變量只能在定義它們的函數內部可見的(除非它們是全球性的)。

你可以做什麼是變量賦值函數對象本身:

function foo() { 
    foo.myVar = 42; 
} 

console.log(foo.myVar); // outputs "undefined" 
foo(); 
console.log(foo.myVar); // outputs "42" 

但我建議不要它。你應該有一個很好的理由去做這樣的事情。

0

您可以將它們定義爲一個全局對象的一部分,然後添加變量後

// Define your global object 
var myObj = {}; 
// Add property (variable) to it 
myObj.myVar = 'Hello world'; 
// Add method to it 
myObj.myFunctions = function() { 
    // Do cool stuff 
}; 

請參見下面的鏈接:

Variable declaration

另外,你可以聲明它沒有VAR關鍵字。但是,這可能不是一個好的做法,因爲它會污染全局命名空間。 (確保嚴格模式沒有打開)。

編輯: 我沒有在發佈前看到其他評論。 @JamesAllardice的回答也不錯。