これらは3つの点で異なります。スコープ、hoisting の挙動、そして再代入です。
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
これらは3つの点で異なります。スコープ、hoisting の挙動、そして再代入です。
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var は function-scoped で、hoisting されて undefined に初期化され、再宣言が可能です。これは予期しない漏れを引き起こすため、使用を避けるべきです。let は block-scoped({ })で、再代入が可能であり、宣言行に到達するまで temporal dead zone に置かれます(早期にアクセスすると例外が発生します)。const は block-scoped で、再代入できません — ただし、束縛(binding)が定数であって、値そのもの ではない点に注意してください。const user = { name: "Ann" };
user.name = "Bob"; // ✅ allowed — mutating the object, not reassigning
user = {}; // ❌ TypeError — can't rebind `user`
デフォルトで const を使い、再代入が必要なときだけ let に切り替え、新しいコードでは var を決して使わない こと。これにより意図が明確になり(「これは変わらない」)、var がもたらすスコープの漏れや hoisting の混乱を避けられます。