【问题标题】:Passing local variables from a function out to become global variables将局部变量从函数传递出去成为全局变量
【发布时间】:2011-08-17 12:50:07
【问题描述】:

过去两个小时我一直在试图弄清楚如何做到这一点,但没有任何效果。这是我的一些代码的简短示例。我想从函数中获取 arrtime 和其他几个类似的变量,以便可以全局使用它们。有任何想法吗?请不要太复杂,我不是专家(显然)。

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

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

【问题讨论】:

    标签: javascript variables global local


    【解决方案1】:

    干净的方法是使用 js-object 表示法:

    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();
    

    【讨论】:

    • 我需要在其他几个函数中使用变量,我相信最简单的方法是使它们成为全局变量。谢谢楼上的,我试试看
    • 这是最简单的方法,但不是最明智的方法(比如转向Dark Side of the force :))。引入一个全局对象并将这些变量存储为它的属性。这样,您将受到保护,将全局变量隐藏在具有相同名称的变量的本地范围内。对象被实例化为obj = {param: value, other_param: other_value}
    • 好的,这样行吗?我创建 dbresults=new Object();我在开始时声明了所有全局变量。然后在函数中我说 dbresults.arrtime= (arrayvals[0]);然后再次在函数之外我可以说 document.getElementById("testing").innerHTML=dbresults.arrtime;这行得通吗?
    • 没有。 JS 对象不是像 C/PHP/JAva 等那样创建的。它只是 {} :)。您不必在对象声明时设置所有变量,您可以稍后添加(在 SO 中搜索,我们在一两天前就有这个问题)。所以,你只需要globals = {};然后,您可以在任何需要的地方使用globals.param 访问它。
    • 我不确定我是否正确地关注了你。我这样做了: dbresults={};function showTest(str) {...... dbresults.arrtime= (arrayvals[0]);document.getElementById("range").innerHTML=dbresults.arrtime; } document.getElementById("testing").innerHTML=dbresults.arrtime;因此,函数内的部分成功地写入了我正在测试它的元素,但函数外的同样事情给了我这个错误:108Uncaught TypeError: Cannot set property 'innerHTML' of null。如果你能告诉我要写什么代码,甚至是像我这样的笨蛋的例子,我会很感激的!
    【解决方案2】:

    你可以在函数之外声明变量。

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

    【讨论】:

      【解决方案3】:
      var testvar;
      function showTest(str) {
      ........
      
              var arrayvals = JSON.parse(xmlhttp.responseText);
              var arrtime= (arrayvals[0]);
              testvar = arrtime;
      }
      alert (testvar);
      

      全局要在函数得分之外声明,但在函数范围内分配。

      【讨论】:

        【解决方案4】:

        您只需省略var,它表示一个只能从函数范围访问的变量。

        【讨论】:

        • 最好不要省略var,而是把它移到你想要的范围内。
        • 当他说它应该是全球性的时,我认为没关系。但你是对的。每个变量都应该用 var... 声明
        猜你喜欢
        • 2023-01-05
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        • 2018-09-02
        相关资源
        最近更新 更多