由于没有人真正解释您遇到问题的原因,因此我将其添加到混合中。
当您将 javascript 中的数组或对象分配给变量时,它会分配对该数组/对象的引用。它不会复制数组/对象。因此,您将拥有两个变量,它们都指向同一个数组/对象,并且修改任何一个都会影响另一个(因为它们都指向同一个底层数据)。
所以,当你有这个时:
var inc_colors = ['#000','#333','#888']; //global inc_colors
var colors = inc_colors; //local colors
您现在所拥有的只是两个变量,它们都指向完全相同的数据。修改其中一个,相同的结果将通过另一个变量显示,因为它们指向相同的基础数据。
如果您想制作副本,则必须明确制作副本(javascript 不会自动为您完成)。对于数组,制作浅拷贝的最简单方法是这样的:
var newColors = Array.prototype.slice.call(inc_colors);
因此,在您的确切代码中,您可以像这样应用该副本:
var inc_colors = ['#000','#333','#888']; //global inc_colors
function toggleLegendColors(reverse){
var reverse = reverse || false;
var colors = Array.prototype.slice.call(inc_colors); //local copy of the colors array
if(reverse) colors.reverse(); //reverses inc_colors array as well as colors
...
}