2016-01-02 4 views
0

J'essaie d'apprendre du javascript en créant un script pour Adobe After Effects CS6. Cependant je suis coincé et ne peux pas comprendre pourquoi. Laissez-moi vous expliquer mon problème.Adobe javascript object non défini après la fonction

à la ligne 156, dans la fonction doMath est l'endroit où mes problèmes commencent. Je n'arrive pas à comprendre pourquoi le copyarray rend la variable de calque indéfinie. ce n'est pas seulement la fonction copyarray qui rend la variable indéfinie. Le getSmallest et le getLargest le font aussi.

Quelques données de mon code que j'ai imprimées (pourraient être utiles).

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

http://pastebin.com/tWQs4mf8 < --- mon code

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; 
} 

Depuis que je suis très nouveau pour une raison simple javascript ce qui se passe est très apprécié.

Répondre

0

Ce n'est pas layers non défini, cela rend layers[i] indéfini.

Le problème est que vous utilisez la variable globale i dans les deux boucles. Ainsi, lorsque copyArray est terminé, i est défini sur layers.length. Mais le dernier élément de layers est layers[layers.length-1].

Vous devez toujours utiliser des variables locales, et non des variables globales, sauf si vous avez besoin d'afficher les données dans plusieurs fonctions. Vous devriez donc écrire:

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

dans vos boucles.

+0

Merci beaucoup! Tu m'as sauvé de pleurer pour dormir! – Shroom