質問: 1;とすると arrがコンソールに3秒おきに表示されます。 が終了ボタンでspe =0 としても関数が回り続け3秒おきにarrが出力されてしまいます。
回答: そういう書き方では想定通り動きません。 イベントなどで定義されていない限り上から下に処理は流れていきます。 「変数を変更したタイミングでif文を・・・」というのは実現できたとして非常に冗長で効率の悪い処理になります。 単にstart , stop をしたいのなら start時にsetInterval()の戻り値を変数に保管しておき、 stop時にclearInterval()すれば良いのでは?