متغیرها در جاوا اسکریپت – آموزش Variables به زبان ساده

۲۳۵۳
۱۴۰۴/۰۵/۴
۲۰ دقیقه
PDF
آموزش متنی جامع
امکان دانلود نسخه PDF

مهم‌ترین بخش یادگیری زبان برنامه نویسی جاوا اسکریپت، درک بلوک اصلی سازنده کدهای آن، یعنی یادگیری و درک متغیرها در جاوا اسکریپت است. فردی به عنوان برنامه نویس جاوا اسکریپت باید بداند که چگونه متغیرها و قوانین آن‌ها را در کدهای خود به کار گیرد. اگر در عین اعلان متغیری، قوانین مربوط به آن نیز اعلان شوند، خواننده کدها را بهتر می‌فهمد و هدف استفاده از متغیرها را به خوبی درک خواهد کرد. به صورت کلی، متغیرها نقش غیرقابل‌انکاری در هر زبان‌ برنامه نویسی ایفا می‌کنند، زیرا برای ذخیره‌سازی مقادیر مختلف از آن‌ها استفاده می‌شود. در این مطلب آموزشی از «مجله فرادرس» اطلاعات دقیقی پیرامون متغیرهای جاوا اسکریپت، قوانین و شیوه اعلان آن‌ها و همچنین تفاوت بین متغیرهای «تعریف نشده» (Undefined) و متغیرهای «اعلان نشده» (Undeclared) ارائه خواهد شد.

آنچه در این مطلب می‌آموزید:
  • یاد می‌گیرید متغیر را به‌درستی تعریف کرده و مقداردهی کنید.
  • خواهید آموخت تفاوت «var» ،«let» و «const» را در اعلان متغیرها تشخیص دهید.
  • قوانین نام‌گذاری متغیرها و پرهیز از کلمات رزرو شده را می‌آموزید.
  • مدیریت محدوده متغیرها را در کدهای ساده و پیچیده یاد می‌گیرید.
  • تفاوت بین متغیرهای تعریف نشده، اعلان نشده و «Hoisting» در جاوا اسکریپت را می‌آموزید.
  • با مزایا و محدودیت‌های «Strict Mode» و «non-Strict Mode» در مدیریت متغیرها آشنا می‌شوید.
متغیرها در جاوا اسکریپت – آموزش Variables به زبان سادهمتغیرها در جاوا اسکریپت – آموزش Variables به زبان ساده
فهرست مطالب این نوشته
997696

همچنین در ادامه موارد گفته شده در مورد «محدوده متغیرهای» (Variable Scope) جاوا اسکریپت و همچنین فهرستی از کلمات کلیدی «رزرو شده» (Reserved Word) شده این زبان و برخی دیگر از قواعد مربوط به این عناصر مهم، مطالبی ارائه می‌شود. در پایان نیز در رابطه با «ثابت» (Const) در جاوا اسکریپت، شیوه اعلان و قوانین مربوط به آن نیز توضیحاتی ارائه خواهد شد.

متغیر جاوا اسکریپت چیست؟

به زبان ساده، در زبان برنامه نویسی جاوا اسکریپت، «متغیر» (Variable) نام محلی از حافظه است که برای ذخیره داده‌ها از آن استفاده می‌شود. از آن جهت به این موجودیت «متغیر» گفته می‌شود که می‌توانند داده‌های موجود در آن‌ها را در صورت لزوم و در طول برنامه از لحاظ نوع و مقدار تغییر دهند. به صورت کلی منظور از متغیرهای جاوا اسکریپت نامی نمادین است و از این موجودیت برای ارجاع به داده یا داده‌هایی خاص استفاده می‌شود.

  • نکته: متغیر جاوا اسکریپت در واقع نوعی «ظرف یا محفظه» (Container) به حساب می‌آید و «مقدار» محسوب نمی‌شود. در واقع می‌توان گفت متغیرها خودشان مقدار نیستند، بلکه محفظه‌ای برای نگهداری مقادیر داده هستند.

مثالی برای درک مفهوم متغیرها در جاوا اسکریپت

فرض می‌شود جعبه‌ای به نام Age وجود دارد که قرار است سن فرد خاصی را در خود ذخیره کند.

در این مثال، نام متغیر، «Age» و سن فرد که در این متغیر ذخیره شده است، «مقدار» آن متغیر به حساب می‌آید.

آموزش کار با متغیرها در جاوا اسکریپ

نحوه ایجاد متغیرها در جاوا اسکریپت

برای ایجاد متغیرها در جاوا اسکریپت باید از کلمه کلیدی let و Var استفاده کرد.

برای مثال، عبارت زیر متغیری را با نام message ایجاد می‌کند. منظور از ایجاد کردن، همان «اعلان» (Declaration) متغیر است.

با استفاده از عملگر «انتساب» (= ) می‌توان مقداری به این متغیر اختصاص داد که برای این کار باید به صورت زیر عمل شود.

داده رشته‌ای (استرینگ | String) مدنظر هم‌اکنون در متغیرmessageذخیره شده است. می‌توان به صورت زیر با استفاده از نام متغیر به آن دسترسی ایجاد کرد.

این کار را می‌توان به صورت «سینتکسی» (Syntax) مختصرتر و با ترکیب دو خطوط «اعلان» (Declaration) و «انتساب» (Assignment) متغیرهای جاوا اسکریپت در یک خط به صورت قطعه کد زیر انجام داد.

همچنین امکان اعلان چندین متغیر جاوا اسکریپت در یک خط نیز وجود دارد که مثال زیر این مفهوم را نشان می‌دهد.

اگرچه امکان کوتاه‌تر نوشتن این متغیرها در جاوا اسکریپت همیشه وجود دارد، اما زیاد توصیه نمی‌شود، زیرا خوانایی کدها را کاهش می‌دهد. برای افزایش خوانایی کدها، بهتر است هر متغیر در یک خط اعلان شود. مثال بالا را می‌توان به صورت زیر برای این منظور بازنویسی کرد.

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

همچنین می‌توان این کار را به صورت زیر هم انجام داد:

به لحاظ فنی، تمام شیوه‌های اعلان بالا هدف یکسانی دارند و انتخاب آن‌ها بستگی به سلیقه شخصی فرد برنامه‌نویس دارد.

قیاس واقعی برای درک متغیر در جاوا اسکریپت

در این بخش، قیاسی واقعی برای درک متغیرهای جاوا اسکریپت ارائه می‌شود. فرض بر این است که متغیر مدنظر پاکت نامه‌ای باشد که داخل این پاکت، نام کارتی با برچسب معین (کارت و برچسب به عنوان داده یا مقدار متغیر عمل می‌کنند) وجود دارد.

در واقع در این مثال پیغام متغیر، Salam Faradars است.

مثالی برای درک مفهوم متغیر در زبان JavaScript

می‌توان به جای Salam Faradarsهر پیغام دیگری را در آن نوشت یا آن را تغییر داد.

هنگامی که مقدار تغییر می‌کند، داده‌های قدیمی از متغیر حذف می‌شوند:

انوع متغیرهای جاوا اسکریپت

همچنین این امکان فراهم است که ۲ متغیر اعلان شده و داده‌های آن‌ها در همدیگر کپی شوند. مثال زیر این موضوع را نشان می‌دهد.

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

همان‌طور که قابل مشاهده است، اجرای کد بالا «خطای نحوی» (SyntaxError) ایجاد خواهد کرد.

Var و Let در نام گذاری متغیرها در جاوا اسکریپت

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

مثال زیر این مفهوم را بیان می‌کند:

کلمه کلیدی varتقریباً با کلمه کلیدی letیکسان است و فقط در اعلان متغیر کمی متفاوت عمل می‌کند. تفاوت‌های ظریفی بین letو varدر جاوا اسکریپت وجود دارد، اما چندان حائز اهمیت نیستند. در بخش‌های بعدی این مطلب به این مسئله بیشتر پرداخته می‌شود، اما قبل از آن بهتر است در مورد نام‌گذاری متغیرها کمی بحث شود.

قوانین اعلان متغیرهای جاوا اسکریپت

برای اعلان متغیرهای جاوا اسکریپت رعایت یک سری قوانین مورد نیاز است و در غیر این صورت می‌تواند خطاهایی در حین اجرای کدها به وجود آید.

این قوانین اعلان متغیرها در جاوا اسکریپت در ادامه فهرست شده‌اند:

  • متغیرها در جاوا اسکریپت به حروف بزرگ و کوچک حساس هستند. برای مثال، دو متغیر رشته‌ای Faradars و faradars  در جاوا اسکریپت متغیرهای متفاوتی در نظر گرفته می‌شوند.
  • می‌توان از حروف، ارقام، نمادهای خاص ($) و آندرلاین (_) در نام‌گذاری متغیرها در جاوا اسکریپت استفاده کرد.
  • شروع نام متغیر با اعداد غیرمجاز است.
  • همچنین استفاده از کلمات کلیدی رزرو شده (Function ،Return ،Typeof ،Break  و غیره) در جاوا اسکریپت به عنوان نام متغیر غیرمجاز است.

چند نکته مهم در رابطه با اعلان متغیر در جاوا اسکریپت

در ادامه ۳ نکته مهم پیرامون اعلان متغیر در زبان جاوا اسکریپت فهرست شده است.

  • در اعلان متغیر جاوا اسکریپت امکان استفاده از چندین «خط فاصله» (اسپیس | Space) و حتی شکستن خط (پرش به خط بعدی) وجود دارد.
  • اعلان متغیرها را می‌توان با استفاده از «کاما» (,) در جاوا اسکریپت از هم جدا کرد.
  • در جاوا اسکریپت امکان ذخیره هر نوع مقداری در متغیرهای جاوا اسکریپت وجود دارد و کاربر هر وقت بخواهد می‌تواند آن را تغییر دهد.

مثال نامگذاری متغیرها در جاوا اسکریپت

در ادامه چندین مثال از نام‌گذاری متغیرها در زبان جاوا اسکریپت برای تفهیم بهتر قوانین اعلان آن‌ها بررسی شده است.

اعلان متغیر جاوا اسکریپت با استفاده از خط فاصله‌ به صورت زیر است:

اعلان دو متغیر جاوا اسکریپت در یک خط و جدا کردن آن‌ها از هم با علامت کاما به صورت زیر است:

استفاده از کلمات کلیدی رزو شده برای اعلان متغیرهای جاوا اسکریپت به صورت زیر است:

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

مثالی از نام‌گذاری غیر معتبر متغیرها در زبان جاوا اسکریپت به صورت زیر است:

سینتکس اعلان متغیر در جاوا اسکریپت

تا به اینجا در رابطه با مفهوم متغیر در جاوا اسکریپت و نحوه نام‌گذاری آن اطلاعاتی ارائه شد، در این بخش در رابطه با سینتکس درست و غلط اعلان و نام‌گذاری متغیرهای جاوا اسکریپت اطلاعت کاملی ارائه می‌شود.

سینتکس درست اعلان متغیر در زبان جاوا اسکریپت به صورت زیر است:

قطعه کد بالا سینتکس معتبری از اعلان متغیر در جاوا اسکریپت است اما سینتکس زیر، سینتکسی غلط و غیر معتبر برای اعلان متغیرها در جاوا اسکریپت به حساب می‌آید.

بررسی این خطاها به ترتیب به صورت زیر است:

  1. در مثال بالا aVariable یک اعلان نیست و اگر هم وجود داشته باشد، مقدار Variable را به کاربر می‌دهد و در غیر این صورت خطایی اتفاق خواهد افتاد.
  2. در رابطه با name var می‌توان گفت که کلمه کلیدی var باید قبل از name قرار بگیرد.
  3. همچنین در رابطه با var 'Mark' = name نیز می‌توان گفت که مقدار باید در سمت راست علامت انتساب باشد.

نکاتی در رابطه با نامگذاری متغیر در جاوا اسکریپت

نام‌گذاری متغیرها در جاوا اسکریپت از اهمیت بسیار ویژه‌ای برخوردار است. نام متغیر باید واضح و فارغ از ابهام باشد به‌گونه‌ای که داده‌ای را که ذخیره می‌کند به خوبی توصیف کند.

متغیرها یکی از مهم‌ترین و پیچیده‌ترین مهارت‌های نرم در برنامه نویسی به حساب می‌آید طوری که نام‌گذاری متغیرها توسط افراد مبتدی و افراد حرفه‌ای کاملاً معلوم است.

نامگذاری متغیر در جاوا اسکریپت

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

  • از نام‌های خوانا برای انسان مانند username یا shoppingCart برای متغیرها استفاده شود.
  • از مخفف‌ها، اسم‌های کوتاه و تک‌حرفی مانند a  ،b ، c و غیره بهتر است خودداری شود، مگر اینکه هدف معلوم باشد.
  • نام متغیر باید کوتاه و در عین حال به خوبی مفهوم را بیان کند.
  • برخی از شرایط و قوانین شخصی در نام‌گذاری اعمال شود. برای مثال اگر بازدیده کننده سایت "user" نامیده شود، باید متغیرهای مرتبط را به جای مثلاً currentVisitor یا newManInTown از currentUserیا newUser نام‌گذاری کرد.
  • و بسیاری از موارد دیگر

راه های اعلان متغیر در جاوا اسکریپت

در زبان برنامه نویسی جاوا اسکریپت متغیرها را می‌توان با سه کلمه کلیدی let ، var یا const تعریف کرد.

مثال زیر این مفهوم را بیان خواهد کرد:

در مثال بالا دو متغیر با کلمات کلیدی متفاوت، یکی با let و دیگری با استفاده از varتعریف شدند. در حال حاضر متغیرهای تعریف شده هیچ مقداری را در خود ذخیره نمی‌کنند. به عبارت دیگر در حال حاضر دو ظرف خالی به نام schoolName و address وجود دارند که هیچ مقداری در آن‌ها قرار نگرفته است. اگر کاربر بخواهد مقدار هرکدام یک از این دو متغیر را ببیند با خروجی «تعریف نشده» (undefined) مواجه خواهد شد.

اعلان متغیرها بدون کلمه کلیدی Var

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

بله این کار امکان دارد. برای این هدف فقط باید نام متغیر را نوشت و مقداری به آن اختصاص داد. با استفاده از این روش، متغیر تعریف شده به متغیری سراسری تبدیل می‌شود و دامنه آن جهانی یا سراسری خواهد بود که از آن‌ها به عنوان «متغیرهای سراسری» (Global Variable) نام می‌برند. مثال زیر برای درک این موضوع بسیار مهم است:

این تمرین را می‌توان در کنسول مرورگر انجام داد و خروجی زیر را مشاهده کرد.

اعلان متغیرها بدون کلمه کلیدی Var

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

مثال زیر نکته مهمی را در رابطه با اعلان متغیر بدون استفاده از کلمات کلیدی بیان می‌کند.

قطعه کد بالا یک اعلانیه محسوب نمی‌شود. اگر این خط کد در کنسول مرورگر اجرا شود و در صورتی که قبلاً متغیر اعلان شده باشد، مقدار age را بازمی‌گرداند و در غیر این صورت خطای مرجع یا ReferenceError ایجاد می‌کند.

آموزش متغیرهای جاوا اسکریپت

قطعه کد بالا خطای مرجع را بازگرادنده است.

مقداردهی اولیه به متغیرهای جاوا اسکریپت

بعد از تعریف متغیر نوبت به مقداردهی اولیه آن می‌رسد. مقداردهی اولیه متغیرها در جاوا اسکریپت به این صورت است که بعد از نام متغیر باید علامت انتساب (=) و سپس مقدار اختصاص داده شده را جلوی آن قرار داد.

مثال زیر نحوه مقداردهی اولیه به متغیرهای جاوا اسکریپت را نشان می‌دهد.

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

مقداردهی اولیه به متغیر در جاوا اسکریپت

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

متغیرهای تعریف نشده و اعلان نشده در جاوا اسکریپت

در این بخش از مطلب، در رابطه با متغیرهای «تعریف نشده» (Undefined) و متغیرهای «اعلان نشده» (Undeclared) در جاوا اسکریپت و تفاوت آن‌ها مطالبی ارائه می‌شود تا کاربر بتواند بین این دو متغیر تمایز قائل شود.

متغیرهای تعریف نشده در جاوا اسکریپت

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

این یعنی که متغیر اعلان می‌شود ولی مقداردهی اولیه نخواهد شد. مثال زیر برای درک این مفهوم بسیار مهم است:

متغیرهای اعلان نشده در جاوا اسکریپت

فرض بر این است کاربری می‌خواهد از متغیری در دستورات جاوا اسکریپت استفاده کند که قبلاً این متغیر اعلان نشده است.

در این حالت «خطای مرجع» (ReferenceError) ایجاد می‌شود زیرا متغیری که در دستور فراخوانی شده، با کلمه کلیدی var اعلان نشده است. به صورت کلی و به عنوان یک قانون، زمانی که به متغیری اعلان نشده دسترسی ایجاد شود، در این صورت منجر به خطای زمان اجرا خواهد شد. مثال زیر این موضوع را بیان می‌کند:

اگر این دستور در کنسول مرورگر اجرا شود با خطای ReferenceError مواجه خواهد شد. خطای به وجود آمده در کنسول نشان می‌دهد که xyz قبلاً اعلان نشده است و کاربر سعی دارد به متغیری اعلان نشده دسترسی پیدا کند. تصویر زیر نحوه اجرای این دستور را در کنسول مروگر نشان می‌دهد.

متغیر اعلام نشده در جاوا اسکریپت

حالت غیر اکید Non-Strict Mode در جاوا اسکریپت

به حالت «غیر اکید یا غیر دقیق» (Non-Strict Mode)، حالت پیش‌فرض حالت «نامرتب» (sloppy) نیز می‌گویند. در جاوا اسکریپت، اگر در کدها عبارت «use strict» را ننویسیم، کدها به طور پیش‌فرض در حالت غیر اکید باقی می مانند.

در حالت غیر اکید یا همان «Non-Strict Mode»، محدودیت‌های کمتری برای نوشتن کدها وجود دارد. از جمله، می‌توان به مورد زیر اشاره کرد:

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

در ادامه مثالی پیرامون این مفهوم ارائه شده است.

در کدهای فوق ملاحظه می‌شود که چون به‌طور پیش‌فرض در حالت غیر دقیق یا همان غیر اکید قرار داریم، می‌تون ۲ متغیر با نام یکسان «two» اعلان و تعریف کرد که هر یک مقدار متفاوتی را در خود ذخیره کرده‌اند.

اعلان متغیر با کلمه کلیدی var بعد از مقداردهی اولیه

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

مثال زیر برای درک این مفهوم بیان شده است:

کد فوق به دلیل «Variable Hoisting» در جاوا اسکریپت کار خواهد کرد که ادامه توضیحاتی نیز در رابطه با «Variable Hoisting» ارائه خواهد شد.

حالت دقیق در جاوا اسکریپت

حالت دقیق یا حالت سخت‌گیرانه با معرفی «ECMAScript 5» در جاوا اسکریپت به وجود آمد. در این حالت، برخی از محدودیت‌ها برای کدنویسی جاوا اسکریپت وجود دارند و با این حال، حالت دقیق مزایایی به صورت فهرست موارد زیر را ارائه می‌دهد:

  • این حالت برخی از خطاها و اخطارهای خاموش را حذف کرده و به جای آن خطاهایی را به منظور کمک به دیباگ کدها، بیرون می‌دهد.
  • این حالت به آسان‌سازی نوشتن کدهای ایمن جاوا اسکریپت کمک خواهد کرد.
  • همچنین این حالت از اقدامات ناخواسته و ناامن کاربران، مانند حذف یک ویژگی از «شی» (Object) سراسری جلوگیری می‌کند. برای مثال در ادامه حذف Object.prototype منجر به خطا می‌شود. این مسئله در تصویر زیر نشان داده شده است.
حالت سخت در جاوا اسکریپت

می‌توان کل بلوک کدهای جاوا اسکریپت یا توابع خاصی را در حالت دقیق اجرا کرد که برای این هدف، باید در شروع و یا در بالای تابع مدنظر عبارت 'use strict' را بنویسیم.

محدودیت در اعلان متغیرهای جاوا اسکریپت در حالت اکید

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

مثال زیر برای بیان این موضوع آورده شده است.

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

Variable Hoisting در جاوا اسکریپت

مهم‌ترین و منحصربه‌فردترین ویژگی در جاوا اسکریپت «Variable Hoisting» یا Hoist کردن در جاوا اسکریپت است که به نام بالا کشیدن یا بالا بردن نیز از آن یاد می‌شود.

در زبان برنامه نویسی جاوا اسکریپت، تمامی اعلان‌های متغیر قبل از اجرای هر بخش دیگری پردازش خواهد شد. اعلان متغیر به بالای کد سراسری یا بالای توابع (بسته به محل اعلان آن) منتقل می‌شود. انتقال این اعلان به بالای تابع یا بالای کدهای سراسری به صورت خودکار و توسط خود جاوا اسکریپت انجام خواهد شد. این انتقال از دید کاربر پنهان است. Hoisting همچنین متغیرهای جاوا اسکریپت را با Undefined یا تعریف نشده مقداردهی اولیه می‌کند. مثال زیر برای درک این مفهوم بسیار مهم است:

قطعه کد بالا با قطعه کد زیر یکسان است:

  • نکته ١: Hoist کردن در جاوا اسکریپت فقط اعلان را به بالای محدوده (سراسری یا تابعی) انتقال می‌دهد و اصلاً خطوط کد را جابه‌جا نمی‌کند. مثال زیر برای درک این نکته ضروری است:

اگرچه عمل Hoisting در جاوا اسکریپت به صورت پیش‌فرض به اعلان متغیرها در بالا کمک می‌کند، اما توصیه می‌شود که متغیرها به صورت دستی در بالای تابع یا کدهای سراسری اعلان شوند تا به عدم سردرگمی کاربر قبل از استفاده از آن کمک کند.

  • نکته ٢: متغیرهای اعلان شده با استفاده از کلمات کلیدی let و const نیز قابلیت Hoist کردن دارند، اما در این حالت با Undefined مقداردهی اولیه نخواهند شد و اگر کاربر بخواهد از متغیرها قبل از اعلان استفاده کند، (استثنا) «Exception» ایجاد می‌شود.

تفاوت بین var و let در اعلان متغیر

در جاوا اسکریپت همان‌طور که گفته شد از هر دو کلمه کلیدی var و letبرای اعلان متغیرها استفاده می‌شود، اما تفاوت اصلی این دو کلمه کلیدی برای این هدف در چیست؟

در ادامه تفاوت‌های این دو کلمه کلیدی برای اعلان متغیرهای جاوا اسکریپت به طور جامع شرح داده شده است:

  • تفاوت اول و اصلی بین varو letدر این است که کلمه کلیدی letبرای اعلان متغیر محدود به بلوکی است که متغیر در آن اعلان شده و از طرف دیگر، کلمه کلیدی varبرای اعلان متغیر محدود به کل کد (دامنه جهانی یا سراسری) است.
  • اگر متغیری را با استفاده از varدر خارج از بلوک، یعنی در محدوده سراسری اعلان کنیم، در نتیجه این متغیر به شی «Window» در کنسول مرورگر اشاره خواهد داشت و این اصلاً برای متغیرهای اعلان شده با letاتفاق نمی‌افتد.
  • اگر متغیری با کلمه کلیدیletاعلان شود، نمی‌توان آن را چند بار اعلان کرد، ولی همان متغیر اگر با کلمه کلیدی varاعلان شود، می‌توان چندین بار با استفاده از varآن را اعلان کرد.
  • Hoist کردن با استفاده از varقابل انجام است، ولی با استفاده از letنمی‌توان آن را انجام داد.
تفاوت بین var و let در جاوا اسکریپت

مثال‌های زیر برای درک بهتر این موضوع از اهمیت بالایی برخوردار هستند. مثال اول در ادامه آمده است.

مثال دوم نیز در ادامه ارائه شده است.

در این حالت، دامنه ۲ متغیر x و y به تابع محدود است و به همین دلیل نمی‌توان مرجع متغیرهای xو yرا خارج از تابع پیدا کرد و در نتیجه خطای مرجع اتفاق خواهد افتاد. در قسمت بعدی این مطلب، دامنه متغیرها در جاوا اسکریپت نیز شرح داده خواهد شد.

تغییر و به روزرسانی متغیرهای جاوا اسکریپت

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

این کار بسیار شبیه به مقداردهی اولیه دوباره متغیر است. در این حالت می‌توان با نوشتن نام متغیر و به دنبال آن علامت انتساب و سپس مقدار جدید، مقدار متغیر را به‌روز کرد یا آن را تغییر داد. مثال زیر این موضوع را نشان خواهد داد.

محدوده Scope متغیر در جاوا اسکریپت

محدوده متغیرهای جاوا اسکریپت به معنای محدوده یا بخشی است که در آن متغیر قابل مشاهده و قابل استفاده خواهد بود.

دو نوع محدوده برای متغیر وجود دارد که به صورت زیر هستند:

  • «محدوده محلی» (Local Scope)
  • «محدوده سراسری» (Global Scope)

به متغیرهای موجود در محدوده محلی، «متغیر محلی» (Local Variable) و به متغیرهای موجود در محدوده سراسری، «متغیرهای سراسری» (Global Variable) گفته می‌شود.

متغیر محلی در جاوا اسکریپت

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

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

متغیر سراسری در جاوا اسکریپت

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

برای مثال در قطعه کد زیر، کاربر می‌تواند از یک متغیر سراسری در داخل توابع مدنظر خود استفاده کند.

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

کلمات رزرو شده جاوا اسکریپت

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

در جدول زیر برخی از این کلمات آورده شده است تا کاربر از نام‌گذاری متغیر با آن‌ها دوری کند.

classcatchcasebreak
defaultdebuggercontinueconst
exportelsedodelete
functionforfinallyextends
instanceofinimportif
switchsuperreturnnew
typeoftrythrowthis
withwhilevoidvar

تعیین نوع پویا جاوا اسکریپت

بدیهی است که جاوا اسکریپت زبانی با تعیین نوع پویا به حساب می‌آید. این یعنی که نوع داده در آن، متغیری ثابت نیست و یک متغیر در جاوا اسکریپت این قابلیت را دارد که هر نوع داده‌ای را در خود ذخیره کند.

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

اگر مثال فوق در کنسول مرورگر اجرا شود، خروجی آن به صورت تصویر زیر خواهد بود.

تعیین نوع در جاوا اسکریپت

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

ثابت ها در جاوا اسکریپت

تا اینجای مطلب در رابطه با متغیرها در جاوا اسکریپت مطالبی ارائه شد و فهمیدیم که متغیرها حاوی مقادیری قابل تغییر هستند.

در جاوا اسکریپت همچنین قابلیت ایجاد «ثابت‌ها» (Consts) نیز وجود دارد که مقادیر آن‌ها برخلاف متغیرها غیرقابل تغییر است. در جاوا اسکریپت با استفاده از کلمه کلیدی const ثابت‌ها اعلان می‌شوند. سیتنکس ثابت‌ها در جاوا اسکریپت به صورت زیر است:

ثابت‌ها شبیه به متغیرها هستند اما دو ویژگی منحصربه‌فرد دارند که به طور کلی رسالت آن‌ها را تغییر می‌دهد. این دو تفاوت به صورت زیر است:

  1. زمانی که ثابتی اعلان شد، حتماً باید مقداردهی اولیه شود. در غیر این صورت خطای نحوی Missing initializer in const declaration اتفاق خواهد افتاد.
  2. زمانی که مقداری به ثابت اختصاص داده شد، این مقدار غیرقابل تغییر خواهد بود.

در زیر چند مثال برای بررسی ثابت‌ها آورده شده است. مثال اول:

مثال دوم نیز در ادامه مشاهده می‌شود.

  • نکته مهم: اگرچه مقدار اختصاص داده شده به ثابت غیرقابل تغییر است، اما در صورتی که مقدار ثابت یک شی باشد، قابلیت تغییر ویژگی‌های شی امکان‌پذیر خواهد بود. مثال زیر این موضوع را نشان می‌دهد:

همچنین می‌توان ویژگی‌های شی ثابت را حذف، به‌روزرسانی و اضافه کرد. با این کار فقط جزئیات شی تغییر می‌کند و مرجع آن تغییری نخواهد کرد. در واقع با این کارها بازهم ثابت به همان شی اشاره خواهد داشت.

نامگذاری ثابت ها با حروف بزرگ در جاوا اسکریپت

روشی بسیار رایج برای استفاده از ثابت‌هایی که به خاطر سپردن نام مستعار آن‌ها دشوار است در جاوا اسکریپت وجود دارد.

چنین ثابت‌هایی با استفاده از حروف بزرگ انگلیسی و آندرلاین نام‌گذاری می‌شوند. مثلاً برای رنگ‌ها در قالب «هگزادسیمال» (Hexadecimal) باید به این صورت عمل کرد. مثال زیر این موضوع را نشان می‌دهد.

مزایای این روش برای این مثال در ادامه فهرست شده‌اند:

  • به خاطر سپردن نام COLOR_ORANGE بسیار ساده‌تر از #FF7F00 است.
  • اشتباه تایپ #FF7F00 بسیار رایج‌تر از COLOR_ORANGE است.
  • خوانایی عبارت COLOR_ORANGEبسیار بیشتر از #FF7F00است.

اما باید چه زمانی برای نام‌گذاری ثابت از حروف بزرگ استفاده کرده و چه زمانی باید آن را به طور معمول نام‌گذاری کرد؟

ثابت بودن همیشه به این معنی نیست که مقدار متغیر هرگز تغییر نخواهد کرد، ولی در این میان ثابت‌هایی وجود دارند که قبل از اجرا کاملاً شناخته می‌شوند. برای مثال، عبارت #F00 به معنای رنگ قرمز در هگزادسیمال است. همچنین ثابت‌هایی وجود دارند که در زمان اجرا (در طول اجرا) شناخته می‌شود و پس از تخصیص اولیه تغییر نمی‌کنند. مثال زیر برای درک این مفهوم بسیار مهم است:

در مثال فوق مقدار pageLoadTime قبل از بارگذاری صفحه معلوم نیست، پس نام‌گذاری این ثابت باید به صورت معمولی باشد.

متغیرها در زبان های برنامه نویسی تابعی

در زبان‌های «برنامه نویسی تابعی» (Functional Programming)، تابعی خالص مانند تابع «Haskell» وجود دارد که تغییر مقادیر متغیر را در برنامه ممنوع می‌کند. در این‌گونه زبان‌ها هنگامی که مقداری در متغیر ذخیره شد، به طور دائمی در آن باقی خواهد ماند.

اگر کاربر بخواهد مقداری جدید در این متغیر ذخیره کند باید متغیری جدید اعلان شود و امکان استفاده از همان متغیر قدیمی برای این هدف وجود ندارد. این مسئله در نگاه اول کمی عجیب است و شاید خیلی کاربردی نباشد اما امروزه از این نوع زبان‌های برنامه نویسی در جاهایی که نیاز به محاسبات و پردازش موازی باشد، بسیار استفاده خواهد شد.

سؤالات متداول

در این بخش ٣ سؤال متداول در رابطه با متغیرها در جاوا اسکریپت برای تکمیل بحث بیان شده است.

کاربرد متغیر در جاوا اسکریپت چیست؟

متغیر در جاوا اسکریپت برای ذخیره مقادیر، مانند اعداد، رشته یا شی استفاده می‌شود.

متغیر در جاوا اسکریپت چگونه اعلان می‌شود؟

چهار روش برای اعلان متغیر جاوا اسکریپت وجود دارد. با استفاده از کلمات کلیدی Var ،Let و Const می‌توان متغیر اعلان کرد. همچنین بدون ذکر کلمه کلیدی نیز این امکان وجود دارد که در این صورت متغیر از نوع سراسری خواهد بود.

تفاوت متغیرها در جاوا اسکریپت کلاسیک و جاوا اسکریپت مدرن چیست؟

در جاوا اسکریپت مدرن، متغیرها با استفاده از کلمات کلیدی Let و Const اعلان می‌شوند. در جاوا اسکریپت کلاسیک، متغیرها با استفاده از کلمه کلیدی Var اعلان خواهند شد.

سخن پایانی

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

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر پرسشی درباره این مطلب دارید، آن را با ما مطرح کنید.
منابع:
JavascriptScaler
PDF
مطالب مرتبط
نظر شما چیست؟

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