2011-08-17 254 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声明... –