2016-10-01 55 views
0

我正在使用webgl应用程序。我有starsList阵列,由于某种原因,当我运行这个功能:TypeError:x未定义 - JS

function initTextures() { 

     for (i = 0; i < starsList.length; i++) { 
      starsList[i].texture = gl.createTexture(); 
      starsList[i].texture.image = new Image(); 
      starsList[i].texture.image.onload = function() { 
       handleLoadedTexture(starsList[i].texture) 
      } 
      starsList[i].texture.image.src = starsList[i].name + ".gif"; 
     } 
    } 

我得到这个错误:

TypeError: starsList[i] is undefined 
handleLoadedTexture(starsList[i].texture) 

虽然在循环的第一行定义starsList[i].texture
有什么想法为什么?

回答

0

当你的onload回调就是所谓的i等于starsList.length

所以starsList[starsList.length]是不确定的。

当您声明您的回调 starsList[i].texture.image.onload = function() { handleLoadedTexture(starsList[i].texture) } 它不会复制一些具体的值starsList。当它被调用时,它会试图找到范围内的所有变量。

对于解决方案,您可以绑定每个onload回调以使用特定的i