Ответ 1
Так как никто не объяснил, почему у вас возникла проблема, я добавлю это в микс.
При назначении переменной или объекту в 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
...
}