全局数组保持空白

时间:2011-11-04 13:20:44

标签: javascript cordova

我想在成功函数的testarray中添加值。我需要在测试函数中返回数组,因为我在脚本中调用了这个函数。 问题是当我调用测试函数时,数组保持为空。我该如何解决这个问题?

    function test()
    {
        var testarray=new Array();

        function success() 
        {

            testarray.push("test1");
        }

        return testarray;   
    }

4 个答案:

答案 0 :(得分:1)

您的代码中没有success的来电。这就是testarray保持空白的原因。

如果您异步调用success,那么testarray的值只有在success完成执行时才会更新。

要检查,您可以执行此操作

function test()
{
    var testarray=new Array();
    function success() 
    {
        testarray.push("test1");
        console.log(testarray); //prints ["test1"]
    }
    return testarray;   //testarray is empty here because success has not yet finished.
}

答案 1 :(得分:0)

你的问题是你只是声明了success()函数,从不执行它。虽然该功能对我没有多大意义,但您可以尝试用以下功能替换您的功能:

(function(){
    testarray.push("test1");
})();

这将定义一个新的匿名函数并立即调用它。

答案 2 :(得分:0)

您必须调用成功功能。

function test() {
    var testarray = new Array();

    function success() {
        testarray.push("test1");
    }

    success();
    success();
    success();
    return testarray;
}

答案 3 :(得分:0)

Narendra said一样,目前您return testarray尚未对其进行修改,因为尚未调用函数success()。既然你没有给我们更多的背景,我会假设你做的很简单,所以我可以给你一个简单的答案。我们假设你想做这样的事情:

for (testElement in test()) {
    console.log( testElement );
}

现在,您希望test()返回一些结果,但它会返回一个空的Array,所以没有任何反应。

要解决这个问题,您可以将您想要做的事情作为函数传递给测试函数,如下所示:

function test(callback) {
    var testarray=new Array();
    function success() {
        testarray.push("test1");
        // Call the callback function:
        callback(testarray);
    }
}

myCallback = function(resultArray) {
    for (testElement in resultArray) {
        console.log( testElement );
    }
}

test(myCallback);
// After some time...
// console: test1

好的,现在它有效。我们定义了一个回调函数,一旦异步代码完成,将调用testarray作为参数。但它可能仍然没有做你想要的,因为它只会工作一次:

test(myCallback);
test(myCallback);
// After some time...
// console: test1
// console: test1

当您再次致电test()时,它会创建一个新的空数组,并在调用sucess()时将"test1"推到其上。这可能不是你想要的(否则,为什么你会使用array?)

那么,我们该如何解决这个问题呢?好吧,我们只是将数组从函数中取出,如下所示:

function test(testarray, callback) {
    function success() {
        testarray.push("test" + (testarray.length+1));
        callback(testarray);
    }
}

myCallback = function(resultArray) {
    for (testElement in resultArray) {
        console.log( testElement );
    }
}

myTestArray = new Array();

test(myTestArray, myCallback);
test(myTestArray, myCallback);
test(myTestArray, myCallback);
// After some time...
// Console: test1
// Console: test1
//          test2
// Console: test1
//          test2
//          test3

这与myarray首先可用于函数success()的原因相同:因为JavaScript在变量上创建了一个“闭包”。这意味着因为变量是在内部函数内引用的,所以在外部函数返回后很久它仍然可以在内部函数中使用。

我希望这会有所帮助。 :)