あなたが問題を抱えている理由を誰も本当に説明していないので、私はそれをミックスに追加します.
配列またはJavaScriptのオブジェクトを変数に割り当てると、その配列/オブジェクトへの参照が割り当てられます。配列/オブジェクトのコピーは作成されません。したがって、同じ配列/オブジェクトを指す 2 つの変数があり、いずれかを変更すると、もう一方に影響します (両方とも同じ基になるデータを指しているため)。
だから、あなたがこれを持っていたとき:
var inc_colors = ['#000','#333','#888']; //global inc_colors
var colors = inc_colors; //local colors
これで、まったく同じデータを指す 2 つの変数しかありません。どちらか一方を変更すると、もう一方の変数を介して同じ結果が表示されます。それらは同じ基になるデータを指しているからです。
コピーを作成したい場合は、明示的にコピーを作成する必要があります (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
...
}