我想在成功函数的testarray中添加值。我需要在测试函数中返回数组,因为我在脚本中调用了这个函数。 问题是当我调用测试函数时,数组保持为空。我该如何解决这个问题?
function test()
{
var testarray=new Array();
function success()
{
testarray.push("test1");
}
return testarray;
}
答案 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在变量上创建了一个“闭包”。这意味着因为变量是在内部函数内引用的,所以在外部函数返回后很久它仍然可以在内部函数中使用。
我希望这会有所帮助。 :)