
ES6 یک روش برای تعریف یک ثابت ها با استفاده از کلمه کلیدی const فراهم کرده است.متغیرهایی که با کلمه کلیدی const ایجاد می شوند، read-only هستند و شما نمی توانید مقدار آن را تغییر دهید.
متغیرهایی که با کلمه کلیدی const تعریف می شوند، همانند let در پست قبلی، block scope هستند. اما قابلیت تغییر و مقداردهی مجدد ندارند.
نحوه تعریف متغیر با کلمه کلیدی const
const PI = 3.141592653589793;
متغیرهای تعریف شده با const غیرقابل تغییر (immutable) هستند. به عبارت دیگر شما نمی توانید مقادیر مختلفی را به آن اختصاص دهید.
اگر تلاش کنید مقدار متغیری که با کلمه کلیدی const تعریف شده است را تغییر دهید، خطا دریافت خواهید کرد
const PI = 3.141592653589793; PI = 3.14; // This will give an error PI = PI + 10; // This will also give an error
برای تعریف یک متغیر با const باید حتما آن را initialize (مقداردهی) اولیه کنید.
const PI; // خطا ایجاد می کند PI = 3.14159265359;
یک قانون کلی در مورد استفاده از کلمه کلیدی const وجود دارد و آن اینست که همیشه سعی کنید برای تعریف متغیرها از const استفاده کنید مگر اینکه بدانید مقدار آن در طول برنامه باید تغییر کند.
استفاده از const در اشیاء (objects) و آرایه ها (arrays)
کلمه کلیدی const در واقع مقدار ثابت ایجاد نمی کند بلکه یک ارجاع (reference) ثابت به آن مقدار ایجاد می کند. بنابراین وقتی یک شیء و یا آرایه با استفاده از const ایجاد می کنیم، می توانیم مقادیر و خاصیت های آن شیء یا آرایه را تغییر دهیم.
// You can create a constant array: const persons = ["Ali", "Amir", "Hesam"]; // You can change an element: persons[0] = "Reza"; // You can add an element: persons.push("Ali");
همانطور که می بینید ما می توانیم مقادیر تعریف شده درون یک آرایه برای یک ثابت را تغییر دهیم.
حالا به این مثال برای آرایه توجه کنید:
const persons = ["Ali", "Amir", "Hesam"]; persons = ["Reza", "Farhad", "Yaser"]; // ERROR
در مثال بالا با توجه به اینکه آرایه ثابت است، ما نمی توانیم آنرا مقداردهی مجدد (reassign) کنیم.
مثال برای Object:
// You can create a const object: const person = {firstname:"Ali", lastname:"amiri", grade:20}; // You can change a property: person.grade = 30; // You can add a property: person.lastname = "karimi";
همانطور که می بینید ما می توانیم مقادیر تعریف شده درون یک Object برای یک ثابت را تغییر دهیم.
const person = {firstname:"Ali", lastname:"amiri", grade:20}; person = {firstname:"Hamed", lastname:"Karimi", grade:30}; // ERROR
در مثال بالا با توجه به اینکه Object ثابت است، ما نمی توانیم آنرا مقداردهی مجدد (reassign) کنیم.
تعریف مجدد یک ثابت (Redeclaring)
در پست های قبلی دیدید که متغیرهایی که با کلمه کلیدی var تعریف می شوند، در هر جای برنامه می توان آنها را مجددا تعریف (redeclare) نموده و مقداردهی نمود:
var a = 1; // مجاز var a = 2; // مجاز a = 3; // مجاز
تعریف مجدد متغیرهایی که قبلا با همان نام توسط let و var تعریف شده اند توسط const مجاز نمی باشد.
var a = 1; // مجاز const a = 1; // مجاز نیست { let a = 2; // مجاز const a = 2; // مجاز نیست } { const a = 3; // مجاز const a = 3; // مجاز نیست }
همچنین تعریف مجدد ثابت هایی که قبلا توسط const تعریف شده اند نیز مجاز نمی باشد.
const x = 2; // مجاز x = 2; // مجاز نیست var x = 2; // مجاز نیست let x = 2; // مجاز نیست const x = 2; // مجاز نیست { const x = 2; // مجاز x = 2; // مجاز نیست var x = 2; // مجاز نیست let x = 2; // مجاز نیست const x = 2; // مجاز نیست }
به کد زیر توجه کنید:
const a = 1; // مجاز { const a = 2; // مجاز } { const a = 3; // مجاز }
با توجه به اینکه کلمات کلیدی let و const به صورت (block scope) طراحی شده اند، در نتیجه در هر بلاک به صورت جداگانه می توانیم متغیر ها و یا ثابت هایی با همان نام تعریف کرده و استفاده کنیم. فقط در نظر داشته باشید که مقدار آنها فقط در همان بلاکی که در آن تعریف شده اند قابل دسترسی می باشند. و وقتی از بلاک خارج می شویم، مقدار متغیر و یا ثابتی که گلوبال تعریف شده قابل دسترسی می باشد.
بالا بردن (const hoisting)
همانطور که در قسمت let
توضیح دادم بالا بردن مکانیزمی است که باعث می شود، قبل از اجرای برنامه، متغیرها و ثابت ها، به بالاترین سطح حوزه خودشان جابجا شوند.
در جاوا اسکریپت، متغیرها در زمان ایجاد شدن، با مقدار تعریف نشده (undefined) مقداردهی اولیه میشوند. مفسر جاوا اسکریپت در زمان اعلان متغیر یک مقدار پیشفرض undefined، را در مرحلهای که فاز «Creation» نامیده میشود به آن انتساب میدهد. این به این معنی است که متغیر هایی که با var تعریف می شوند می توانند هر زمان مورد استفاده قرار بگیرند حتی قبل از تعریف متغیر:
person = "Ali"; var person;
در زمان اجرای برنامه عبارت تعریف متغیر به بالاترین سطح خودش منتقل می شود بدین صورت:
var person = undefined; person = "Ali";
در مورد const قضیه متفاوت است. همانطور که می دانید، ما نمی توانیم یک ثابت را بدون مقدار دهی اولیه تعریف کنیم. در نتیجه موقع اجرای کد زیر با خطا مواجه می شویم:
alert (person); //ReferenceError const person = "Ali";
در زمان اجرای کد، برنامه بدین صورت اجرا می شود:
const person; alert (person); //ReferenceError person = "Ali";
ديدگاه كاربران
دیدگاهی وجود ندارد