2016-01-02 2 views
0

Я пытаюсь изучить некоторые javascript, создав скрипт для adobe after effects cs6. Однако я застрял и не могу понять, почему. Позвольте мне объяснить мою проблему.Adobe javascript object undefined after function

в строке 156, в функции doMath, где возникают мои проблемы. Я не могу понять, почему copyarray делает переменные слоев неопределенными. это не только функция copyarray, которая делает переменную неопределенной. Получается getSmallest и getLargest.

Некоторые данные из моего кода, который я распечатал (может быть полезно).

Layername +Y max="80" target="4" inverted 
axis   Y 
maxValue  80 
target  4 
positive  true 
inverted  true 

http://pastebin.com/tWQs4mf8 < --- мой код

function doMath(layers){ 
    for(i=0;i!=layers.length;i++) 
    { 
     if(layers[i].axis=="X") 
     { 
      layers[i].convertedData=layers[i].Xdata; 
     } 
     else 
     { 
      layers[i].convertedData=layers[i].Ydata; 
     } 
     alert(layers[i])         //Shows on the alert "Object object" 
     var copy = copyArray (layers[i].convertedData); 
     alert(layers[i]);         //Shows undefined 
     var smallest = getSmallest(copy); 
     var largest = getLargest (copy); 
     var range = largest-smallest; 
     $.writeln(smallest + " " + " " + largest + " " + range);             
     if(layers[i].Positive==null) 
     { 
      var temp = getConverted(layers[i].convertedData,smallest,range,layers[i].maxValue,layers[i].inverted); 
      layers[i].convertedData=temp; 
     } 
    } 
}; 

function copyArray(a){ 
    var b = [a.length]; 
    for(i=0;i!=a.length;i++) 
    { 
     b[i] = a[i]; 
    } 
    return b; 
} 

Поскольку я новичок в Javascript простой причине, что происходит очень ценится.

ответ

0

Это не делает layers не определено, оно делает layers[i] не определено.

Проблема в том, что вы используете глобальную переменную i в обеих циклах. Поэтому, когда copyArray сделано, i установлен в layers.length. Но последний элемент в layers - layers[layers.length-1].

Вы должны всегда использовать локальные переменные, а не глобальные переменные, если у вас нет веских оснований для того, чтобы данные были видимыми в нескольких функциях. Поэтому вы должны написать:

for (var i = 0; i < a.length; i++) 

в ваших циклах.

+0

Большое вам спасибо! Вы спасли меня от того, чтобы плакать, чтобы спать! – Shroom