【问题标题】:Making variables available outside a function without globals使变量在没有全局变量的函数外部可用
【发布时间】:2014-03-08 14:56:03
【问题描述】:

我正在努力弄清楚如何在 javascript 中传递信息。某个好心人可以告诉我如何从一个函数中获取一个变量并在另一个函数中使用它,但不使变量成为全局变量。我想我需要使用 return,但我被卡住了,不知道用什么谷歌来获得我可以从中学到的东西。

例如,如何使“json”变量可用,以便在“MasterView”函数中使用它。提前谢谢你。

function fetchData() {
var xhr = Ti.Network.createHTTPClient({
    onload : function(e) {
        Ti.App.Properties.setString('cachedJson', this.responseText);
        var json = JSON.parse(Ti.App.Properties.getString('cachedJson',''));
    },
    timeout: 5000
});

xhr.open("GET", site_url + "?get_json=postObjects");
xhr.send();
}

function MasterView() {};

【问题讨论】:

    标签: javascript titanium


    【解决方案1】:

    有很多方法可以在不使用全局变量的情况下解决这个问题。

    另外,“不使变量成为全局变量”是什么意思?
    您想避免污染全局命名空间,或者您只是不希望您的变量在您的所有函数中都可用?

    这是一种将值从一个函数传递到另一个函数的方法:

    function a(){
        var hello = "world";
        return hello;
    }
    
    function b(){
        var result = a();
        console.log(result);
    }
    

    如您所见,函数 a() 返回变量 hello,其值为“world”。
    现在,如果您调用函数 b(),它会将 a() 的返回值存储在名为 result 的变量中,然后将其记录到控制台。

    另一种选择是在函数中使用参数(有时称为参数):

    function a(){
        var hello = "world";
        b(hello);
    }
    
    function b(arg){
        console.log(arg);
    }
    

    在这种情况下,如果您调用函数 a(),它会立即调用函数 b(),并传递变量 hello,因此 b() 将记录“world”。
    当然,后一种方法并不总是一个好的选择,即你根本不希望你的第一个函数调用另一个函数。在这种情况下,您可以执行以下操作:

    function a(){
        var hello = "world";
        return hello;
    }
    
    function b(arg){
        console.log(arg);
    }
    

    然后调用函数 b() 为:b(a());
    这样您就可以将函数 a() 的返回值作为参数传递给函数 b()。

    希望这可以解决您的大部分问题。 :)

    【讨论】:

      【解决方案2】:
      // Simply add this:
      var json;
      // and continue...
      function fetchData() {
          var xhr = Ti.Network.createHTTPClient({
              onload : function(e) {
                  Ti.App.Properties.setString('cachedJson', this.responseText);
                  json = JSON.parse(Ti.App.Properties.getString('cachedJson',''));
              },
              timeout: 5000
          });
      
          xhr.open("GET", site_url + "?get_json=postObjects");
          xhr.send();
      }
      function MasterView() {
          console.log(JSON.stringify(json))
      };
      

      希望它可能会起作用......或者:

      function fetchData() {
          var xhr = Ti.Network.createHTTPClient({
              onload : function(e) {
                  Ti.App.Properties.setString('cachedJson', this.responseText);
                  json = JSON.parse(Ti.App.Properties.getString('cachedJson',''));
              },
              timeout: 5000
          });
      
          xhr.open("GET", site_url + "?get_json=postObjects");
          xhr.send();
      }
      function MasterView() {
          var json;
          fetchData();
          console.log(JSON.stringify(json))
      };
      

      【讨论】:

        【解决方案3】:

        全局变量对很多事情都有用,但是如果您需要的唯一变量是 json,并且您只需要在函数 Masterview 中使用它,则从函数 MasterView 调用函数 fetchData 并使 fetchData 返回 json。

        W3 学校是 javascript 和 html 开发的绝佳工具。试试这个链接了解更多关于函数的信息,特别是有返回值的函数。 http://www.w3schools.com/js/js_functions.asp

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-04
          • 1970-01-01
          相关资源
          最近更新 更多