Javascript 图像添加到画布的奇怪行为

Javascript 图像添加到画布的奇怪行为,javascript,canvas,kineticjs,Javascript,Canvas,Kineticjs,我尝试在画布上显示一些应该在单击事件时显示的图像。看起来一切正常,但我发现了一些bug,我无法修复很长时间。错误在于第一个页面上的打开指示灯图像未显示。可通过以下步骤进行复制: 在浏览器中打开 单击按钮image至少您的代码中有一个(非常常见的)错误。方法.onload需要分配函数引用。您正在将其分配给即时函数调用的结果(返回值)processButtonImages(i,delta,buttons[i],object)。因此,只要您没有从此函数调用返回函数引用(您没有),这将不会按预期工作。您

我尝试在画布上显示一些应该在单击事件时显示的图像。看起来一切正常,但我发现了一些bug,我无法修复很长时间。错误在于第一个页面上的打开指示灯图像未显示。可通过以下步骤进行复制:

  • 在浏览器中打开
  • 单击按钮image至少您的代码中有一个(非常常见的)错误。方法
    .onload
    需要分配函数引用。您正在将其分配给即时函数调用的结果(返回值)
    processButtonImages(i,delta,buttons[i],object)
    。因此,只要您没有从此函数调用返回函数引用(您没有),这将不会按预期工作。

    您正在调用并设置image onload事件中的某些内容。所以,一开始它不能正确地执行整个过程。检查这个jsfiddle。我在最后编辑了代码,

    Hm,实际上我没有领会其中的含义。那么,我应该写什么来返回引用呢?应该是这样的:
    returnprocessButtonImages
    processButtonImages
    函数的末尾?不,实际上,此时您必须重新考虑您的语义。通常您可以这样做
    buttons[i].onload=function(){processButtonImages(i,delta,buttons[i],object)}但是,当您在循环中分配它时,它仍然会遇到同步问题(由于关闭)。您需要“放松”循环或创建另一个(内部)闭包来处理循环索引,问题就在这部分代码中。经过一些额外的调试,我解决了它。谢谢