JavaScript Let

تعریف یک متغیر با استفاده از let

کلید واژه let در ES6 (2015) معرفی شد. در هنگام تعریف یک متغیر با استفاده از let به یک سری نکات باید دقت کرد که در ادامه به ترتیب در مورد آن‌ها صحبت خواهیم کرد.

متغیر را نمی‌توان بازتعریف کرد

متغیری که با استفاده از let تعریف شده را نمی‌توان در ادامه کد بازتعریف کرد. این در حقیقت یک نوع مزیت محسوب می‌شود و شما به صورت تصادفی نمی‌توانید متغیری را که پیشتر تعریف کرده‌اید دوباره تعریف کنید. به عنوان مثال شما نمی‌توانید چنین کاری را انجام دهید:

let x = "John Doe";

let x = 0;

// SyntaxError: 'x' has already been declared

اما اگر از var استفاده کنید مجاز به انجام چنین کاری هستید:

var x = "John Doe";

var x = 0;

Block Scope

قبل از ES6 (2015) در جاوا اسکریپت متغیرها یا سراسری Global Scope و یا محلی Functional Scope بودند. اما در حال حاضر با استفاده از دو کلید واژه let و const متغیرها می‌توانند متعلق به یک بلوک باشند و مفهوم Block Scope هم به جاوا اسکریپت اضافه شده است. این بدان معنی است که اگر متغیری با استفاده از این دو کلید واژه داخل یک بلوک {} تعریف شود، بیرون از بلوک نمی‌توان به آن دسترسی داشت:

{
let x = 2;
}
// x can NOT be used here

متغیرهایی که با استفاده از var تعریف می‌شوند چنین حالتی ندارند و بیرون از بلوک هم قابل دسترسی هستند.

{
var x = 2;
}
// x CAN be used here

باز تعریف متغیرها

بازتعریف یک متغیر با استفاده از var ممکن است مشکلاتی را به وجود آورد. یادتان باشد که بازتعریف یک متغیر داخل یک بلوک، خارج از بلوک هم متغیر را بازتعریف خواهد کرد:

var x = 10;
// Here x is 10

{
var x = 2;
// Here x is 2
}

// Here x is 2

ولی باز تعریف یک متغیر با استفاده از let این مشکل را حل کرده است. بازتعریف متغیر داخل یک بلوک، متغیر را بیرون از بلوک بازتعریف نمی‌کند.

let x = 10;
// Here x is 10

{
let x = 2;
// Here x is 2
}

// Here x is 10

دقت کنید که برخلاف var با استفاده از let نمی‌توانید هر جایی متغیر را بازتعریف کنید:

var x = 2; // Allowed
let x = 3; // Not allowed

{
let x = 2; // Allowed
let x = 3 // Not allowed
}

{
let x = 2; // Allowed
var x = 3 // Not allowed
}

همان طور که ملاحظه می‌کنید داخل یک بلوک نمی‌توانید متغیری را که با استفاده از let تعریف شده است بازتعریف کنید.

آخرین نکته در مورد تعریف متغیر با استفاده از let آن است که باید قبل از استفاده، متغیر تعریف شده باشد. کد زیر اشتباه است و ایجاد خطا می‌کند:

carName = "Saab";
let carName = "Volvo";