تبلیغات

کلمه کلیدی let در جاوا اaسکریپت و تفاوت آن با var

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

در اکما اسکریپت (ECMAScript)، کلمه کلیدی جدیدی برای تعریف متغیر به نام let به جاوا اسکریپت اضافه شده است؛ که به جای var می‌توان از آن استفاده کرد. این کلمه کلیدی دقیقا همانند var تعریف و استفاده می‌شود! مثلا به صورت زیر:

بنابراین تفاوت var و let در چیست؟!

اولین تفاوت

یکی از تفاوت‌های این دو کلمه کلیدی که برای تعریف متغیر استفاده می‌شوند، در قلمرو (Scope) آنهاست! یعنی چه؟! 😐

var باعث می‌شود تا متغیر، تحت قلمروی نزدیک‌ترین بلاک فانکشن (تابع) خود در بیاید! اما let، تحت قلمروی نزدیک‌ترین بلاک است و فرقی ندارد که تابع باشد یا شرط و …! اما دوباره یعنی چه؟! 😀

اجازه دهید مثالی بزنیم. ابتدا از var:

اگر این کد را اجرا کنید، عبارت salam در لاگ چاپ می‌شود! یعنی اگرچه message داخل بلاک شرط تعریف شده است، ولی قلمروی آن تحت نزدیک‌ترین فانکشن به خود است. اما اجازه دهید همین را با let بنویسیم:

با اجرای این کد، می‌بینید که چیزی چاپ نمی‌شود!

بنابراین به نظر شما کدام یک بهتر است؟! آیا استفاده از var، موجوب نخواهد شد بعدا به مشکلاتی برخورد کنیم؟!

دومین تفاوت

تفاوت دیگر این است که متغیرهای تعریف شده با let، قبل از اینکه در محدوده‌ی خود مقدار دهی نشوند، قابل دسترسی نیستند! اما یعنی چه؟! 😐

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

با اجرای این کد، خواهید دید که undefined به معنای تعریف نشده چاپ می‌شود! اما اگر همین را با let بنویسیم:

خواهید دید که یک دوباره undefined چاپ می‌شود! خب پس تفاوت چیست؟!

  • اگر بعدا با var تعریف شود یعنی: undefined است؛ ولی قابل دسترسی است!
  • اگر با val تعریف شود، یعنی: undefined است؛ ولی دسرتسی نیست.

بنابراین اگر کدی که با let می‌باشد را به صورت زیر بنویسیم:

در اینصورت با خطا روبرو خواهید شم؛ همچنین در کد بالا فرقی ندارد که let را داخل try بنویسیم و یا بعد از آن بنویسیم. اما حالا همین را با var ببینید:

احتمالا salam چاپ شود! لذا به غیرمنطقی بودن var و استاندارد نبودن آن پی خواهید برد.

سومین تفاوت

هردو را می‌توان به صورت گلوبال (سراسری) تعریف کرد؛ اما آن مواردی که با let تعریف می‌شوند، برخلاف var، جزء یکی از ویژگی‌ها یا پروپرتی‌های آبجکت سراسری windows نخواهند شد! مثال:

چهارمین تفاوت

زمان استفاده از var، فرقی ندارد که یک متغیری با یک نام قبلا تعریف کرد‌ه‌اید یا نه!  مثلا:

هیچ خطایی نخواهد گرفت! اما در let اینگونه نیست!

در اینجا با خطای SyntaxError روبرو خواهیم شد؛ مبنا بر اینکه این شناسه قبلا برای متغیر دیگری تعریف شده است. البته این مربوط به این نیست که اگر در بیرون از توابع چیزی تعریف کردیم، نتوانیم داخل محدوده‌ی توابع با همان اسم چیز جدیدی تعریف کنیم. چراکه هردوی اینها محدوده‌ی توابع را نیز در نظر می‌گیرند.

امیدوارم از مطلب لذت برده باشید.

تبلیغات
0
کانال تلگرام فول کده
تبلیغات

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه