در جاوااسکریپت (JavaScript)، var و let هر دو برای تعریف متغیر استفاده می‌شوند، اما تفاوت‌های مهمی با هم دارند که دانستن آن‌ها برای جلوگیری از باگ‌ها ضروری است.

🆚 تفاوت‌های کلیدی بین var و let

ویژگی var let
محدوده (Scope) تابعی (function-scoped) بلوکی (block-scoped)
بازتعریف مجدد (Redeclaration) مجاز است مجاز نیست در یک بلاک
هوایینگ (Hoisting) بله، ولی مقدار undefined دارد بله، اما قبل از تعریف قابل استفاده نیست (TDZ)
اعلان تکراری در یک بلوک مجاز است خطا می‌دهد
قابل دسترس بودن قبل از تعریف بله، مقدار undefined است خطای ReferenceError

 

📘 مثال‌ها

🎯 ۱. محدوده (Scope)

function testVar() {
  if (true) {
    var x = 10;
  }
  console.log(x); // 10 ✅
}

function testLet() {
  if (true) {
    let y = 20;
  }
  console.log(y); // ❌ ReferenceError: y is not defined
}

testVar();
testLet();

🎯 ۲. هوایینگ (Hoisting)

console.log(a); // undefined

var a = 5;

console.log(b); // ❌ ReferenceError

let b = 10;

🎯 ۳. بازتعریف متغیر

var name = "Ali";
var name = "Reza"; // مجاز است ✅

let city = "Tehran";
// let city = "Shiraz"; // ❌ SyntaxError: Identifier 'city' has already been declared

✅ نتیجه‌گیری

  • همیشه از let (یا const) استفاده کن مگر اینکه دلیل خاصی برای var داشته باشی.

  • let ایمن‌تر و قابل پیش‌بینی‌تر است، مخصوصاً در حلقه‌ها و توابع.