جزئیات let و تفاوت آن با var در جاوااسکریپت
همانطور که در مقاله متغیر در جاوااسکریپت خواندید میتوانید از کلمه کلیدی let و var برای تعریف متغیر استفاده کنید. در این قسمت از مجموعه آموزشی جاوااسکریپت با جزئیات let و تفاوتهای آن با var در JavaScript آشنا میشوید.
نکته: همانطور که قبلا هم گفتیم تنها در صورتی که قرار است کد شما در مرورگرهای قدیمی اجرا شود یا لازم است از مرورگرهای قدیمی هم پشتیبانی کنید باید از var استفاده کنید. در غیر این صورت پیشنهاد میکنیم از let برای تعریف متغیر کمک بگیرید.
قلمرو بلاکی
کلمه کلیدی let باعث میشود متغیر به صورت محلی دارای قلمرو بلاک فعلی باشد. به این ترتیب متغیری که با let در یک بلاک داخل { } تعریف میشود در خارج از این بلاک قابل دسترس نیست:
{
let x = 20;
}
// You cannot use x here
اما متغیرهایی که با کلمه کلیدی var تعریف میشوند در خارج از بلاک نیز قابل دسترسی هستند:
{
var x = 20;
}
// You can use x here
به این ترتیب اگر متغیری که با let تعریف شده است در یک زیربلاک (یا بلاک داخلی) با همان نام توسط let تعریف شود دو متغیر مجزا خواهیم داشت که متغیر بلاک داخلی به قلمرو همان بلاک محدود میشود:
let x = 20;
// here, value of x is 20
{
let x = 40; // a different variable with value 40
}
// here, value of x is 20
اما بازنویسی کد فوق با var باعث ایجاد متغیر جدیدی محدود به زیربلاک نخواهد شد. به این ترتیب انجام هر تغییری در بلاک داخلی روی این متغیر در خارج از آن نیز معتبر خواهد بود:
var x = 20;
// here, value of x is 20
{
var x = 40; // the same variable, now value of x is 40
}
// here, value of x is 40
عدم امکان تعریف مجدد متغیر با let در جاوااسکریپت
متغیرهای تعریف شده با دستور let نمیتوانند در همان قلمرو دوباره تعریف شوند. با وجود این خاصیت در دستور let، امکان اینکه یک متغیر را به اشتباه یا سهوی دوباره تعریف کنید از بین میرود. به این ترتیب نمیتوانید به صورت زیر عمل کنید:
let x = "Hello, world!";
let x = 20;
این درحالیست که امکان تعریف مجدد متغیری که با دستور var تعریف شده است وجود دارد. بنابراین کد زیر قابل قبول است:
var x = "Hello, world!";
var x = 20;
فراموش نکنید بر اساس این موضوع، شناسه متغیری که با let در یک تابع تعریف میشود نیز نمیتواند با پارامترهای تابع یکسان باشد.
تقدم تعریف متغیر با let نسبت به استفاده از آن
متغیری که با let تعریف میشود باید پیش از استفاده تعریف شده باشد. بر اساس این موضوع، کد زیر باعث بروز خطا میشود:
x = 40;
let x;
اما متغیری که با var تعریف میشود به سمت ابتدای کد بالا برده میشود (Hoisting). به این ترتیب میتوانید برای متغیری که با var تعریف میشود بالاتر از محل تعریف متغیر، مقدار اختصاص بدهید. بر اساس این موضوع، کد زیر صحیح است:
x = 40;
var x;
عدم چسبیدن به this
برخلاف var، متغیری که با let تعریف میشود باعث ایجاد یک ویژگی برای this نمیشود:
var x1 = 10;
let x2 = 20;
console.log(this.x1); // 10
console.log(this.x2); // undefined
تعریف چند متغیر در یک دستور
شما میتوانید چند متغیر را در یک دستور با کمک let یا var تعریف کنید. کافیست متغیرها را با کاما از هم جدا کنید:
let x = 40, y = "Hello, World!", z;
بازگشت به فهرست مجموعه آموزشی JavaScript