آموزش JavaScript
۲۶۰ آموزش
نمایش دسته بندی ها (۲۶۰ آموزش)

تعریف متغیرها (Variables)، با let ، در JavaScript

همان طور که می دانید، متغیرها (Variables) برای ذخیره کردن مقادیر (Value) به کار می روند. در JavaScript ، برای تعریف یک متغیر (Variable)، می توانیم از دستور let استفاده کنیم.

به عنوان مثال :

نکته

در JavaScript ، علاوه بر let ، با استفاده از var و const نیز می توانیم متغیرها (Variable) را تعریف کنیم ( کلید شماره 2399 و کلید شماره 28249 ).

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
نکته

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

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

مثال

نتیجه :

کد خطا می دهد و به درستی اجرا نمی شود (زیرا خواسته ایم با استفاده از let دوباره متغیر را تعریف کنیم) :

خطا - صفحه را دوباره بارگذاری کنید

دقت شود که مفهوم ((تعریف مجدد متغیر)) را با ((به روزرسانی مقدار متغیر)) اشتباه نگیرید (تعریف = Define ، به روزرسانی = Update). در ((به روزرسانی مقدار متغیر))، عبارت let دوباره نوشته نمی شود، اما در ((تعریف مجدد متغیر)) عبارت let دوباره نوشته می شود. اگرچه با استفاده از let امکان ((تعریف مجدد متغیر)) وجود ندارد، اما ((به روزرسانی مقدار متغیر)) امکان پذیر است. چگونگی ((به روزرسانی مقدار متغیر)) را در نکته زیر نشان داده ایم :

نکته

امکان به روزرسانی (Update) مقدار یک متغیر (Variable) با استفاده از let وجود دارد.

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

مثال

نتیجه :

کد به درستی عمل می کند (بدون خطا) :

خطا - صفحه را دوباره بارگذاری کنید
نکته

برای تعریف یک متغیر (Variable) با استفاده از let ، می توانیم ابتدا تنها با ذکر نام متغیر (Variable)، آن را تعریف کنیم (بدون اینکه مقدار (Value) آن را مشخص کنیم) و سپس در ادامه کدها، هر کجا که نیاز بود، مقدار (Value) مورد نظرمان را برای آن متغیر (Variable) تعیین نماییم (مقداردهی متغیر).

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید

محدوده تعریف (Scope) متغیرهای (Variable) تعریف شده با let :

درJavaScript ، می توانیم محدوده تعریف (Scope) متغیرها (Variable) را به دو دسته کلی زیر تقسیم کنیم :

  1. محدوده تعریف سراسری (Global Scope)
  2. محدوده تعریف محلی (Local Scope)

که محدوده تعریف محلی (Local Scope) خود به دو دسته تقسیم می شود :

  1. محدوده تعریف تابعی (Function Scope)
  2. محدوده تعریف بلوکی (Block Scope)

بنابراین در کل در JavaScript می توانیم بگوییم که 3 نوع محدوده تعریف (Scope) داریم :

  1. محدوده تعریف سراسری (Global Scope)
  2. محدوده تعریف تابعی (Function Scope) (یک نوع محدوده تعریف محلی (Local Scope))
  3. محدوده تعریف بلوکی (Block Scope) (یک نوع محدوده تعریف محلی (Local Scope))

در ادامه بر اساس شرح دادن مفهوم هر یک از این محدوده های تعریف (Scope)، در مورد محدوده تعریف (Scope) متغیرهای (Variable) تعریف شده با let توضیحاتی خواهیم داد. البته توضیحاتی نیز در مورد var و const خواهیم داد تا هم مقایسه کنید و هم مفاهیم را بهتر متوجه شوید.

محدوده تعریف سراسری (Global Scope) :

چنانچه متغیری (Variable) را با استفاده از let در خارج از کدهای یک تابع (Function) تعریف کرده باشیم، آنگاه مقدار (Value) متغیر (Variable) مورد نظر درون کدهای آن تابع (Function) در دسترس می باشد (var و const نیز همین ویژگی را دارند).

در اصطلاح می گوییم که آن متغیر (Variable)، سراسری (Global) است و آن را متغیر سراسری (Global Variable) می نامیم و می گوییم که دارای محدوده تعریف سراسری (Global Scope) می باشد.

ما عبارت های قبل را برای حالتی که تنها یک تابع (Function) داریم، بیان کردیم. اگر بیش از یک تابع (Function) داشته باشیم، باید متغیر (Variable) در خارج از همه توابع (Function) تعریف شده باشد. آنگاه می گوییم که متغیر (Variable) به صورت سراسری (Globally) تعریف شده و بنابراین در همه توابع (Function) و اسکریپت ها (Script) در دسترس می باشد (در هر بخشی از کدها در دسترس می باشد) (دارای محدوده تعریف سراسری (Global Scope) خواهد بود).

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید

همچنین تفاوتی نمی کند که متغیر (Variable) در قبل از کدهای تابع (Function) تعریف شده باشد، یا بعد از کدهای تابع (نتیجه هر دو یکسان است) :

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید

محدوده تعریف تابعی (Function Scope) (یک نوع محدوده تعریف محلی (Local Scope)) :

چنانچه متغیری (Variable) را با استفاده از let درون کدهای یک تابع (Function) تعریف کنیم، آنگاه مقدار (Value) متغیر (Variable) در بیرون از کدهای آن تابع (Function) در دسترس نمی باشد (var و const نیز همین ویژگی را دارند).

در اصطلاح می گوییم که آن متغیر (Variable) نسبت به آن تابع (Function)، محلی (Local) می باشد و آن را متغیر محلی (Local Variable) می نامیم و می گوییم که دارای محدوده تعریف تابعی (Function Scope) می باشد (یعنی فقط در درون تابع (Function) تعریف شده و در دسنرس می باشد).

دقت کنید که محدوده تعریف تابعی (Function Scope)، یک نوع محدوده تعریف محلی (Local Scope) است و بنابراین می توانیم بگوییم که متغیر (Variable) دارای محدوده تعریف محلی (Local Scope) می باشد.

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

مثال

نتیجه :

هیچ خروجی نخواهیم داشت (چون متغیر در خارج از تابع، تعریف نشده) :

خطا - صفحه را دوباره بارگذاری کنید

اینکه تابع (Function) اجرا شده باشد یا نباشد، هیچ تاثیری ندارد و در هر دو حالت، مقدار (Value) متغیر (Variable) در بیرون از کدهای تابع (Function) در دسترس نمی باشد :

نتیجه :

هیچ خروجی نخواهیم داشت (چون متغیر در خارج از تابع، تعریف نشده) :

خطا - صفحه را دوباره بارگذاری کنید
نکته

چنانچه متغیری (Variable) را با استفاده از let در خارج از کدهای یک تابع (Function) تعریف کرده باشیم و سپس مقدار (Value) متغیر (Variable) مورد نظر را درون کدهای آن تابع (Function) تغییر دهیم (تعیین مقدار جدید)، پس از اجرای آن تابع (Function)، آنگاه متغیر (Variable) مورد نظر هم در خارج از آن تابع (Function) و هم در داخل کدهای آن تابع (Function)، دارای آن مقدار جدید می باشد (var نیز همین ویژگی را دارد، اما برای const اصلا امکان تغییر دادن مقدار (Value) متغیر (Variable) وجود ندارد).

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید

محدوده تعریف بلوکی (Block Scope) (یک نوع محدوده تعریف محلی (Local Scope)) :

در JavaScript ، متغیرهایی که با استفاده از let یا const تعریف می شوند، دارای محدوده تعریف بلوکی (Block Scope) می باشند، اما متغیرهایی که با استفاده از var تعریف می شوند، اینگونه نیستند و دارای محدوده تعریف بلوکی (Block Scope) نمی باشند.

اما بهتر است که ابتدا شرح دهیم که اصلا بلوک (Block) و محدوده تعریف بلوکی (Block Scope) چیست.

در JavaScript ، هر قطعه کدی که در بین علامت های { } قرار بگیرد را یک بلوک (Block) می نامیم. به عنوان مثال، کد زیر، یک بلوک (Block) می باشد :

چنانچه متغیری (Variable) را با استفاده از let یا const تعریف کنیم، آنگاه آن متغیر (Variable) دارای محدوده تعریف بلوکی (Block Scope) خواهد بود. یعنی متغیرهایی که با استفاده از let یا const درون یک بلوک (Block) تعریف می شوند، فقط در داخل آن بلوک (Block) در دسترس هستند و در خارج از آن بلوک (Block)، در دسترس نیستند (تعریف نشده اند) و نمی توانیم به مقدار آنها در خارج از آن بلوک (Block) دسترسی داشته باشیم (در بیرون از علامت های { } تعریف نشده اند و در دسترس نمی باشند).

دقت کنید که محدوده تعریف بلوکی (Block Scope)، یک نوع محدوده تعریف محلی (Local Scope) است و بنابراین می توانیم بگوییم که متغیر (Variable) دارای محدوده تعریف محلی (Local Scope) می باشد.

اما برای var اینگونه نیست و هنگامی که متغیرهایی (Variable) با استفاده از var درون یک بلوک (Block) تعریف می شوند، هم در داخل آن بلوک (Block) و هم در خارج از آن بلوک (Block)، در دسترس هستند (تعریف شده اند) (در بیرون از علامت های { } تعریف شده اند و در دسترس می باشند).

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

مثال

نتیجه :

هیچ خروجی نخواهیم داشت، زیرا متغیر (Variable) در خارج از بلوک (Block) تعریف نشده است :

خطا - صفحه را دوباره بارگذاری کنید
مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
نکته

چنانچه متغیری (Variable) را با استفاده از let در خارج از کدهای یک بلوک (Block) تعریف کرده باشیم، در درون بلوک (Block) به مقدار متغیر (Variable) دسترسی داریم.

همچنین اگر مقدار (Value) متغیر (Variable) مورد نظر را درون کدهای آن بلوک (Block) تغییر دهیم (تعیین مقدار جدید)، پس از اجرای کدهای درون بلوک (Block)، آنگاه متغیر (Variable) مورد نظر هم در خارج از آن بلوک (Block) و هم در داخل کدهای آن بلوک (Block)، دارای آن مقدار جدید می باشد (var نیز همین ویژگی را دارد، اما برای const اصلا امکان تغییر دادن مقدار (Value) متغیر (Variable) وجود ندارد و تنها به مقدار متغیر (Variable) دسترسی داریم).

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
نکته

باید دقت داشت که علامت های { } در ساختار کدنویسی عبارت های شرطی if و switch نیز وجود دارند (این عبارت های شرطی (Condition)، به صورت بلوک (Block) می باشند).

بنابراین وقتی با استفاده از let یا const ، یک متغیر (Variable) را درون کدهای یک بلوک عبارت شرطی (if یا switch) تعریف می کنیم، آنگاه متغیر (Variable) در خارج از بلوک عبارت شرطی، تعریف نشده است و به مقدار آن دسترسی نداریم (یعنی حتی اگر شرط برقرار باشد و کد تعریف متغیر (Variable) اجرا شود، باز هم متغیر (Variable) در خارج از بلوک (Block)، تعریف نشده) :

اما برای var اینگونه نیست (اگر شرط برقرار باشد، آنگاه متغیر (Variable) در خارج از بلوک (Block)، تعریف شده) :

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

مثال

نتیجه :

هیچ خروجی نخواهیم داشت، زیرا متغیر (Variable) در خارج از بلوک (Block) تعریف نشده است (حتی با وجود اینکه در عبارت شرطی، شرط صادق است) (اما در داخل بلوک (Block) تعریف شده) :

خطا - صفحه را دوباره بارگذاری کنید
مثال

نتیجه :

چون در عبارت شرطی، شرط صادق است، بنابراین متغیر (Variable) برابر مقدار مورد نظرمان تعریف شده و در خارج از بلوک (Block) نیز تعریف شده و در دسترس می باشد :

خطا - صفحه را دوباره بارگذاری کنید
نکته

باید دقت داشت که علامت های { } در ساختار کدنویسی حلقه های for و while نیز وجود دارند (این حلقه ها (Loop)، به صورت بلوک (Block) می باشند).

بنابراین وقتی با استفاده از let یا const ، یک متغیر (Variable) را درون کدهای یک بلوک حلقه (for یا while) تعریف می کنیم، آنگاه متغیر (Variable) در خارج از بلوک حلقه (for یا while)، تعریف نشده است و به مقدار آن دسترسی نداریم :

اما برای var اینگونه نیست (متغیر (Variable) در خارج از بلوک (Block)، تعریف شده) :

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

مثال

نتیجه :

هیچ خروجی نخواهیم داشت، زیرا متغیر (Variable) در خارج از بلوک (Block) تعریف نشده است (فقط در داخل بلوک (Block) تعریف شده) :

خطا - صفحه را دوباره بارگذاری کنید
مثال

نتیجه :

متغیر (Variable) در خارج از بلوک (Block) نیز تعریف شده و در دسترس می باشد :

خطا - صفحه را دوباره بارگذاری کنید
نکته

اگرچه علامت های { } در ساختار کدنویسی توابع (Function) وجود دارند، ولی وقتی با توابع (Function) سر و کار داریم، باید مفهوم محدوده تعریف تابعی (Function Scope) را در نظر بگیریم (نه مفهوم محدوده تعریف بلوکی (Block Scope)) :

بنابراین مطابق مفهوم محدوده تعریف تابعی (Function Scope)، چنانچه متغیری (Variable) را با استفاده از var درون کدهای یک تابع (Function) تعریف کنیم، آنگاه مقدار (Value) متغیر (Variable) در بیرون از کدهای آن تابع (Function) در دسترس نمی باشد.

اما اگر با دیدن علامت های { } می خواستیم از مفهوم محدوده تعریف بلوکی (Block Scope) استفاده کنیم، دچار اشتباه می شدیم، زیرا بر اساس آن مفهوم استدلال می کردیم که چون متغیر (Variable) با استفاده از var تعریف شده، باید مقدار (Value) متغیر (Variable) در بیرون از بلوک (Block) (علامت های { } ) در دسترس باشد، که چنین چیزی نیست و غلط است.

بنابراین برای var و let و const ، هر زمان که یک تابع (Function) تعریف کردید، تنها مفهوم محدوده تعریف تابعی (Function Scope) را در نظر بگیرید.

تعریف خودکار (Automatically) یک متغیر (Variable) به صورت متغیر سراسری (Global Variable) (دارای محدوده تعریف سراسری (Global Scope)) :

فرض کنید قبلا نام یک متغیر (Variable) را اعلام نکرده باشیم (Undeclared Variable)، یعنی نه var و نه let و نه const برای اعلام نام مورد نظرمان به عنوان یک متغیر (Variable) به کار نرفته باشد و فقط یک مقدار (Value) را برای نام مورد نظر تعیین نماییم :

در این حالت، یک متغیر (Variable) تعریف شده است که به صورت خودکار (Automatically) یک متغیر سراسری (Global Variable) است و دارای محدوده تعریف سراسری (Global Scope) می باشد.

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
نکته

در JavaScript ، با استفاده از Strict Mode ، می توانیم از تعریف خودکار (Automatically) متغیرهای اعلام نشده (Undeclared Variable) به صورت متغیر سراسری (Global Variable) (دارای محدوده تعریف سراسری (Global Scope))، جلوگیری کنیم.

متغیرهای سراسری (Global Variable) (دارای محدوده تعریف سراسری (Global Scope))، در HTML :

در هنگامی که با JavaScript کار می کنیم، محدوده تعریف سراسری (Global Scope) همان JavaScript Environment (محیط JavaScript) می باشد.

در HTML ، محدوده تعریف سراسری (Global Scope) برابر شیء window است.

در HTML ، هر متغیری (Variable) که با استفاده از var به صورت متغیر سراسری (Global Variable) تعریف شود، از طریق شیء window به آن متغیر (Variable) دسترسی داریم. یعنی مثلا اگر در HTML ، با استفاده از var ، یک متغیر سراسری (Global Variable) با نام kelidestan تعریف کنیم :

آنگاه از طریق عبارت زیر (بر اساس شیء window ) به مقدار (Value) متغیر kelidestan دسترسی خواهیم داشت :

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
نکته

دقت کنید که این مورد، برای متغیرهای سراسری (Global Variable) تعریف شده با let یا const صدق نمی کند.

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

مثال

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
نکته

بنابراین در HTML ، هنگام تعریف متغیرهای سراسری (Global Variable) (یا توابعی (Function) که در واقع متغیر سراسری (Global Variable) هستند) با استفاده از var ، باید مراقب باشیم که متغیرها (Variable) و توابع (Function) شیء window بازنویسی (Overwrite) نشوند.

نکته

در JavaScript ، شیء ها (Object) و توابع (Function) نیز در واقع متغیر (Variable) می باشند. بنابراین همه مواردی که در مورد محدوده تعریف (Scope) متغیرها (Variable) ذکر کردیم، برای آنها نیز صادق است.

پس در هنگام کدنویسی، باید قواعد مربوط به محدوده تعریف (Scope) را برای این 3 مورد در نظر داشته باشیم :

  1. متغیرها (Variable)
  2. شیء ها (Object)
  3. توابع (Function)

تعریف یک متغیر (Variable) به صورت شیء (Object)، با استفاده از let :

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

مثال

ابتدا متغیری (Variable) را با استفاده از let به صورت یک شیء (Object) تعریف می کنیم و سپس با روش JSON.stringify آن را تبدیل به یک رشته (String) کرده و در خروجی صفحه نمایش می دهیم :

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید

این بار مقدار (Value) مشخصه name را تغییر می دهیم :

نتیجه :

خطا - صفحه را دوباره بارگذاری کنید
منابع و لینک های مفید
نویسنده علیرضا گلمکانی
شماره کلید 28247
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 0 0 0

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)