let และ const (ES2015) เป็น Block-Scoped ต่าง var (Function-Scoped)
let: Reassign ได้ | const: Reassign ไม่ได้ (แต่ Mutate Object/Array ได้)
ตัวอย่าง
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Const vs Let</title>
<style>
body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
.result, .sample { font-size: 20px; font-weight: 500; }
</style>
</head>
<body>
<h1>Const vs Let in JavaScript</h1>
<div class="sample"></div>
<div style="color: green;" class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3> Click to reassign const and let </h3>
<script>
let resEle = document.querySelector(".result");
let sampleEle = document.querySelector(".sample");
let a = 22;
const b = 44;
sampleEle.innerHTML = "let a = " + a + " ";
sampleEle.innerHTML += "const b = " + b;
document.querySelector(".Btn").addEventListener("click", () => {
a = 99; // OK
resEle.innerHTML = "Reassign a = " + a + " ";
try {
b = 22; // Error
} catch (err) {
resEle.innerHTML += "Reassign b Error: " + err;
}
});
function changeB() { b = 22; } // Error if called
</script>
</body>
</html>
คำอธิบาย
| Feature | let | const | var |
|---|---|---|---|
| Reassign | ✅ | ❌ | ✅ |
| Redeclare | ❌ | ❌ | ✅ |
| Hoisting | TDZ | TDZ | Initialized undefined |
| Scope | Block | Block | Function |
| Mutate Object/Array | ✅ | ✅ | ✅ |
Best Practice
- Default ใช้
const - ต้อง Reassign ใช้
let - หลีกเลี่ยง
var
ผลลัพธ์
Reassign a = 99 | Reassign b Error: TypeError: Assignment to constant variable