First I’d expect you should pinMode(BUTTON, INPUT_PULLUP);
when you connect your button between D1 and GND or INPUT_PULLDOWN
for D1 -> 3V3 (I’d go for GND).
And triggering for CHANGE
you need to debounce the button, as @v8dave said.
There is a thread that talks about interrupt plus debounce already.
http://community.spark.io/t/how-to-track-debouncing-in-an-interrupt-function/6918