【发布时间】:2015-05-26 12:04:31
【问题描述】:
我正在处理一个非常令人沮丧的问题,我可以 console.log 一个数组,但是当我尝试返回它时,它返回一个没有长度的空白数组。
下面是代码,它得到的输入类似于 [0.1234]。可选地,还有其他参数,但现在不需要这些参数。没有它们,它只是返回一个数组。实际上只是输入。嗯,这就是我想要它做的。
在 else 套件中,我 console.log(oArr) 并且它记录正常,但是当我返回它时,它返回一个空白数组。在那里你还会看到我必须将输入参数 i 传输到输入变量,因为当我尝试在 setTimeout 中检查它的长度时,它给出的长度为零,即使当我记录它时,它是什么记录的长度不为零。但是当我将它分配给一个新的变量时,它工作得很好。 setTimeout 存在的原因是,除非我使用 setTimeout 将其放入队列中,否则 for 循环不会运行。
function runV(i, l, y){
var a=[],o=[],x={};
if(i[1]!==undefined){
a=i[0];
if(i.length>1) i=i[1];
else i=undefined;
setTimeout(function(){
for(var j=0; j<a.length; j++){
var oArr=[];
oArr.push(a[j]);
if(i===undefined){
if(y!==undefined) o=y.activate(oArr);
else return oArr;
}
else{
if(y!==undefined) x['adverbs']=y.activate(oArr);
else return oArr;
}
}
}, 0);
if(i!==undefined){
for(var j=0; j<i.length; j++){
var oArr=[];
oArr.push(i[j]);
if(l!==undefined) x['emotions']=l.activate(oArr);
}
}
}
else{
var input;
setTimeout(function(){
input=i;
for(var j=0; j<input.length; j++){
var oArr=[];
oArr.push(i[j]);
console.log(oArr);
if(l!==undefined) o=l.activate(oArr);
return oArr;
}
}, 0);
}
if(x.adverbs!==undefined) return x;
return o;
}
【问题讨论】:
-
你从一个匿名函数返回它
-
setTimeout中的函数异步运行。你不能从中返回一些东西。runV在启动计时器时返回,它不会等待它完成。 -
@iccthedral 从匿名函数返回没什么问题,问题是从异步函数返回。
-
@Barmar 没错。那我如何返回 oArr?除非在 setTimeout 中,否则 for 循环不会运行
-
我想不出for循环不能正常运行的任何原因。
标签: javascript arrays function