Adobe javascript对象在函数后未定义

时间:2016-01-02 16:19:36

标签: javascript adobe after-effects

我试图通过在效果cs6后制作adobe脚本来学习一些javascript。但是我卡住了,无法弄清楚原因。让我解释一下我的问题。

在第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非常陌生,因此非常感谢您所发生的事情。

1 个答案:

答案 0 :(得分:0)

它没有使layers未定义,它使layers[i]未定义。

问题是你在两个循环中使用全局变量i。因此,当copyArray完成后,i将设置为layers.length。但layers中的最后一个元素是layers[layers.length-1]

除非您有充分的理由需要在多个函数中显示数据,否则应始终使用局部变量而不是全局变量。所以你应该写:

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

在你的循环中。