Javascript 无法填充数组

Javascript 无法填充数组,javascript,canvas,Javascript,Canvas,嘿,我在draw函数中声明了drawOne函数,这样内部函数drawOne就可以访问局部变量checkduplicates。但是,在drawOne函数运行16次之后,数组checkduplicates应该填充对象,drawOne中的console.log显示数组中有16个对象,这一点得到了证实。但是,我用“Problem”标记的console.log函数显示数组只有第一个对象,而其他console.log则显示数组中充满了对象。我不明白为什么,因为修改数组的唯一方法是通过“push”方法,它已经

嘿,我在draw函数中声明了drawOne函数,这样内部函数drawOne就可以访问局部变量checkduplicates。但是,在drawOne函数运行16次之后,数组checkduplicates应该填充对象,drawOne中的console.log显示数组中有16个对象,这一点得到了证实。但是,我用“Problem”标记的console.log函数显示数组只有第一个对象,而其他console.log则显示数组中充满了对象。我不明白为什么,因为修改数组的唯一方法是通过“push”方法,它已经被调用了16次,如果我注释掉img.onload部分,带有注释“problem”的console.log显示数组中充满了对象。为了简单起见,我故意省略了其他代码,我的firebug也没有抱怨bug。谢谢

由于您使用的是异步递归,对
drawOne
的初始调用将在第一次迭代后返回。加载第一个图像后,以及退出
draw
功能后,迭代将继续进行,以便浏览器重新获得控制权,从而可以处理事件


因此,在第一次迭代之后,数组只包含一个项目根本不是问题,这是您所使用的迭代方法的预期结果。

Wait-i从何而来?还有“照片”?还有“检查副本”?您没有发布足够的代码。i已初始化为0;我会修好的。谢谢好的,但我仍然不明白为什么内部console.log显示数组已填充,而外部console.log显示数组仅包含一个对象。但它们不是同一个数组吗?应该只有一个与“checkduplicates”关联的内存地址?感谢you@Clinteney许:是同一个数组,但在不同的时间点。首先执行一次登录
drawOne
,显示一个的长度,然后执行登录
Draw
,显示相同的结果。之后,将加载第一个图像并处理第一个
onload
事件,登录
drawOne
显示两个图像的长度。然后随着数组大小的增加,执行rest
onload
事件。在
Draw
函数中,数组长度不可能不是1,因为只要您在函数中,就不会处理第一个
onload
事件。非常感谢您的解释。
function draw(data)
{
var i = 0;
var checkduplicates = new Array();
drawOne(i);
//console.log(checkduplicates) Problem!!!;

function drawOne(i)
{
         //photos is a object that has been omitted for simplicity
    var picinfo = photos[Math.floor(Math.random()*photos.length)];
    checkduplicates.push(picinfo);

    img.onload = function()
    {
        var ctx = document.getElementsByClassName("canvas")[i].getContext('2d');
        // Draw pieces
        ctx.drawImage(img,0,0,132,150);
        //ctx.fillText("haha",0,0);
        ctx.drawImage(frame,0,0,133,152);
        i++;
        if (i != canvaslength)
        {
             drawOne(i);
        }
    }
    //console.log(checkduplicates.length);
}
}