Adobe javascript 函数后对象未定义

Adobe javascript object undefined after function

我正在尝试通过为 adobe after effects cs6 制作脚本来学习一些 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 很陌生,所以非常感谢正在发生的事情的一个简单原因。

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

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

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

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

在你的循环中。