在没有全局变量的函数外部使变量可用

时间:2014-03-08 14:56:04

标签: javascript titanium

我正在努力探讨如何在javascript中传递信息。有些人可以告诉我如何从函数中获取变量并在另一个函数中使用它但不使变量成为全局变量。我想我需要使用返回,但我被困住了,不知道该怎么去谷歌才能得到我能学到的东西。

例如,如何使“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() {};

3 个答案:

答案 0 :(得分:4)

如果不使用全局变量,有很多方法可以解决这个问题。

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

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

function a(){
    var hello = "world";
    return hello;
}

function b(){
    var result = a();
    console.log(result);
}

如您所见,函数a()返回变量hello,其值为“world” 现在,如果你调用函数b(),它会将一个()的返回值存储在一个名为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()。

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

答案 1 :(得分: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))
};

答案 2 :(得分:0)

全局变量对很多东西很有用,但是如果你需要的唯一变量是json,而你只需要在Masterview函数中使用它,那么从函数MasterView调用函数fetchData并使fetchData返回json。

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