我试图通过在效果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非常陌生,因此非常感谢您所发生的事情。
答案 0 :(得分:0)
它没有使layers
未定义,它使layers[i]
未定义。
问题是你在两个循环中使用全局变量i
。因此,当copyArray
完成后,i
将设置为layers.length
。但layers
中的最后一个元素是layers[layers.length-1]
。
除非您有充分的理由需要在多个函数中显示数据,否则应始终使用局部变量而不是全局变量。所以你应该写:
for (var i = 0; i < a.length; i++)
在你的循环中。