2011-08-17 333 views
2

我花了最後兩個小時試圖弄清楚如何做到這一點,但沒有任何工作。這裏是我的一些代碼的簡短示例。我想從函數中獲得arrtime和其他幾個類似的變量,所以我可以在全局中使用它們。有任何想法嗎?請不要太複雜,我不是專家(顯然)。從函數傳遞局部變量變爲全局變量

function showTest(str) { 
........ 

     var arrayvals = JSON.parse(xmlhttp.responseText); 
     var arrtime= (arrayvals[0]); 
} 
var testvar=arrtime; 
document.getElementById("testing").innerHTML=testvar; 

回答

7

乾淨的方式做到這一點是使用JS對象的符號:

function showTest(str) { 
    //other code 
    return {arr: arrayvals, tm: arrtime}; 
} 

var func_result = showTest("blah-blah"); 
var testvar =func_result.tm; 
var testvar2=func_result.arr; 

但它通常是一個壞主意,有全局變量。你爲什麼需要它?與global對象

globals = {}; 
function q(){ 
    globals['a'] = 123; 
    globals[123] = 'qweqwe'; 
} 
function w(){ 
    alert(globals.a); 
    //alert(globals.123); //will not work 
    alert(globals[123]); //that's OK. 
} 
q(); 
w(); 
+0

我需要在其他幾個函數中使用這些變量,我相信最簡單的方法是使它們成爲全局變量。感謝上述,我會試一試 – Peter

+0

這是最簡單的方法,但不是最明智的方式(就像轉向'暗部的力量':))。引入一個全局對象並將它們存儲爲屬性。通過這種方式,您將受到保護,將全局變量隱藏在具有相同名稱的變量的本地範圍內。對象被實例化爲'obj = {param:value,other_param:other_value}'。 – J0HN

+0

好的,這項工作?我創建了dbresults = new Object();我在開始時聲明瞭所有我的全局變量。然後在函數中我說dbresults.arrtime =(arrayvals [0]);然後在函數外面,我可以說document.getElementById(「測試」)。innerHTML = dbresults.arrtime;這會起作用嗎? – Peter

1

更新示例代碼,您可以在函數外聲明的變量。

var arrtime, arrayvals; 

function showTest(str) { 
     arrayvals = JSON.parse(xmlhttp.responseText); 
     arrtime= (arrayvals[0]); 
} 
var testvar=arrtime; 
alert (testvar); 
0
var testvar; 
function showTest(str) { 
........ 

     var arrayvals = JSON.parse(xmlhttp.responseText); 
     var arrtime= (arrayvals[0]); 
     testvar = arrtime; 
} 
alert (testvar); 

全球是函數的分數以外的聲明,但分配功能的範圍內。

0

您只需要省略var,它指示只能從函數作用域訪問的變量。

+0

最好不要忽略'var',而是將其移入您想要的範圍。 – Thilo

+0

當他說它應該是全球性的,那麼我認爲沒關係。但你是對的。每個變量應該用var聲明... –