تفاوت let با var در جاوا اسکریپت

تفاوت let با var در جاوا اسکریپت
آکادمی آی تی
آکادمی آی تی
dots

تفاوت let با var در جاوا اسکریپت

زمان مورد نیاز برای مطالعه 5 دقیقه

تفاوت بین let و var در جاوا اسکریپت یکی موضوعات اساسی در جاوا اسکریپت می باشد که با دانستن آن می توانید پروژه خود را از وجود باگ های آزار دهنده نجات دهید.

دپارتمان ‌ها: آموزش طراحی سایت
1401/10/13
1,151 بازدید

تفاوت let و var در javascript

اگر در حوزه طراحی وب فعالیت داشته باشید، بدون شک با زبان جاوا اسکریپت آشنایی دارید و همان طور که می دانید در بیشتر زبان های برنامه نویسی مفهوم متغیر (variable) وجود دارد. تعریف کردن variable در هر زبان متفاوت می باشد و با توجه به سینتکس آن زبان مشخص می شود. همین طور در زبان جاوا اسکریپت برای تعریف کردن متغیر از کلیدواژه های let، var و const استفاده می شود.

تفاوت هایی بین تعریف کردن متغیرها وجود دارد که بابد هنگام استفاده از آنها اطلاع داشته باشید. در صورتی که بدون هیچ دانشی از آن ها استفاده کنید ممکن است در پروژه های بزرگ با مشکلاتی روبرو شوید.

در این مقاله قصد داریم از مهم ترین تفاوت متغیرهای var و  let در جاوا اسکریپت بپردازیم؛ پس تا انتهای مقاله با ما همراه باشید.

 

آشنایی با برخی از اصطلاحات در برنامه نویسی

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

1. اسکوپ (Scope)

Scope یا حوزه، به قسمت هایی از کد گفته می شود که متغیرها در بدنه آن قابل دسترس و استفاده هستند. برای مثال در تابع یا کلاس متغیرهای سراسری درون بدنه قرار دارد Scope Global هستند و متغیرهایی که خارج از بدنه وجود دارد متعلق به Local Scope می باشند.

 

2. Hoisting

این کلیدواژه به زبان پارسی به معنای بالا بردن می باشد و در زبان جاوا اسکریپت مکانیزمی است که باعث می شود قبل از اجرای برنامه، متغیرها و توابع، به بالاترین سطح scope منتقل شوند.

 

var در جاوا اسکریپت

قبل از اینکه زبان جاوا اسکریپت نسخه ES6 معرفی شود، تنها راه موجود برای ساخت متغیرها در جاوا اسکریپت متغیر var بود. استفاده از متغیر var در پروژه های بزرگ مشکلاتی بوجود می آورد و به همین دلیل یک متغیر جدیدی به نام let برای تعریف کردن متغیر ایجاد کردند.

قبل از اینکه درباره متغیر let صحبت کنیم، بیاین درباره var بیشتر بدانیم. وقتی که از متغیر var استفاده می کنید، می‌توان یا در حوزه سراسری و لوکال (محلی) دسترسی داشته باشید. یعنی وقتی که یک متغیر در بیرون از یک تابع تعریف شده باشد در تمامی برنامه می توان استفاده کرد (حتی درون تابع).

var x = "Hello World!";

function print() {
  alert(x);
}

print(x); // Hello World!

اگر به مثال بالا توجه کنید، ما متغیر x رو درون تابع هم قرار دادیم. وقتی یک متغیر با var درون یک تابع تعریف شود، اسکوپ این متغیر لوکال می باشد. یعنی فقط داخل همان بدنه تابع قابل دسترس است.

function Func() {
  var x = 1;
}
Func();
alert(x); // error: x is not defined

به مثال زیر دقت کنید:

var age = "20";
var times = 4;

if (times > 3) {
  var age = "15"; 
}

alert(age) //"15"

زمانی که در خط سوم شرط ما برقرار می شود، متغیر FirstNumber دوباره تعریف و مقدارش تغییر پیدا می کند. اگر به صورت عمد مقدار آن را تغییر دهیم، مشکلی وجود ندارد. اما وقتی متغیر FirstNumber از قبل توی کد ما تعریف شده باشد و ما از وجود آن اطلاعی نداشته باشیم، احتمال اینکه کد ما دچار باگ شود زیاد است.

 

let در جاوا اسکریپت

متغیرهایی که با let تعریف می شوند، دارای اسکوپ بلاکی (Block Scoped) هستند. یعنی اینکه کدها درون بدنه بین براکت { } قرار می گیرد. بنابراین متغیرهایی که با let تعریف می شوند، فقط درون همان بدنه یا بلاک قابل دسترسی هستند، به مثال زیر دقت کنید: 

let times = 4;

if (times > 3) {
  let MyAge = "23";
  alert(MyAge); // "23"
}

alert(MyAge) // error: hello is not defined

بنابراین، مشکلاتی رو که در متغیر var بررسی شد، دیگر برای متغیر let به وجود نمی آید.

 

تفاوت بین let و var در جاوا اسکریپت

1. ویژگی تعریف مجدد یا ReDecluration

یکی از مهم ترین تفاوت های var و let قابلیت تعریف مجدد متغیر می باشد. وقتی که یک متغیری را تعریف می کنید، اصطلاحا به آن Declurate گفته می شود و اما زمانی که همان متغیر را مجددا تعریف کنید یعنی آن را ReDeclurate کرده اید (تعریف دوباره). متغیر های تعریف شده با کلیدواژه var قابلیت تعریف دوباره دارند و می توان مقدار آن را تغییر داد.

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

 

2. محدودیت Scope

یکی دیگر از مهم ترین تفاوت های var و let بخش اسکوپ آن ها است. همان طور که اشاره کردیم کلمه Scope در لغت به معنای حوزه یا ناحیه است. در حالت عادی اگر متغیری در ناحیه ای تعریف شود، فقط در همان بخشی که تعریف شده، محدود است و در خارج از آن حوزه قابل استفاده نمی باشد.

برای مثال وقتی که متغیری که داخل بدنه یک تابع تعریف می کنید، فقط درون بدنه تابع می توان استفاده کرد و خارج از تابع قابل دسترس نیست. متغیر let از همین ویژگی برخوردار است.

 

کدام یک از متغیر var و let استفاده کنیم؟

طبق توضیحاتی که در رابطه با تفاوت های var و let اشاره کردیم، پیشنهاد می کنیم طبق استانداردهای Clean Code و Best Practice از متغیر var به هیچ عنوان استفاده نکنید و سعی کنید همیشه در تعریف کردن متغیرهای جاوا اسکریپت از متغیر let استفاده کنید. به این دلیل اگر از متغیر var استفاده کنید ممکن است در پروژه های بزرگی که انجام میدهید دچار مشکلات و باگ هایی شوید که برای شما دردسر ایجاد کند.