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++)
在你的循环中。
我正在尝试通过为 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++)
在你的循环中。