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";