constを使って値が再代入できるのはなぜですか?

スコープが異なるからです。
2021年2月26日
ユーザー

お世話になっております。
基本的な質問かも知れませんが、次のコードでsetTimeoutにより10ms後にcountUpの関数が実行されると、変数d、m、s、ms には新しく値が再代入される訳ではないのですか?
「constは値は再代入できない」と認識していたのですが..。
勿論、全て let に変更してみても、動作は同じでした。

let startTime;

function countUp(){
    const d = new Date(Date.now() - startTime);
    const m = String(d.getMinutes()).padStart(2,'0');
    const s = String(d.getSeconds()).padStart(2,'0');
    const ms = String(d.getMilliseconds()).padStart(3,'0');
    timer.textContent = `${m}:${s}.${ms}`;

    setTimeout(countUp, 10);
}

start.addEventListener('click', () => {
    startTime = Date.now();
    countUp();
});

この回答を見るにはプレミアムプランへの登録が必要です

プレミアムプランとは?