2016-10-01 3 views
0

Im работает над webgl app. У меня есть starsList массив и по какой-то причине, когда я запускаю эту функцию:ТипError: 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.

So starsList[starsList.length] не определено.

Когда вы объявляете свой обратный вызов starsList[i].texture.image.onload = function() { handleLoadedTexture(starsList[i].texture) } не копирует некоторые конкретные значения starsList. Он просто попытается найти все переменные в области, когда он был вызван.

Для решения вы можете связать каждый ответный запрос на перегрузку, чтобы использовать конкретный i

Смежные вопросы