در برنامههای جاوااسکریپت، مقدارها میتوانند بهصورت مستقیم (literal) یا از طریق متغیرها ظاهر شوند. متغیرها مانند ظرفهایی هستند که مقدار را در خود نگه میدارند. برای استفاده از متغیر، ابتدا باید آن را تعریف کرد. جاوااسکریپت چند روش مختلف برای تعریف متغیر دارد که هرکدام رفتار خاصی دارند.
کلیدواژه var متغیر را در دامنهٔ تابع یا دامنهٔ سراسری تعریف میکند:
var name = "Kyle";
var age;متغیر تعریفشده با var در کل تابع (یا فایل) قابلدسترسی است، حتی خارج از بلوکهایی مانند if.
let مشابه var است اما با تفاوت مهمی: محدودهٔ بلوکی
var adult = true;
if (adult) {
var name = "Kyle";
let age = 39;
console.log("Shhh, this is a secret!");
}
console.log(name); // Kyle
console.log(age); // خطا!متغیر age فقط درون بلوک if قابلدسترسی است، اما name
استفاده از let برای محدود کردن دامنهٔ متغیرها مفید است، زیرا از تداخل نامها جلوگیری میکند. اما var نیز در مواقعی که نیاز به دسترسی گستردهتر داریم، کاربرد دارد.
const مانند let است اما با محدودیت بیشتر: باید هنگام تعریف مقداردهی شود و قابلتغییر نیست:
const myBirthday = true;
let age = 39;
if (myBirthday) {
age = age + 1; // مجاز
myBirthday = false; // خطا!
}const فقط از تغییر مقدار جلوگیری میکند، نه از تغییر محتوای شیء. بنابراین استفاده از const برای آرایهها یا اشیاء ممکن است باعث سردرگمی شود:
const actors = ["Morgan Freeman", "Jennifer Aniston"];
actors[2] = "Tom Cruise"; // مجاز :(
actors = []; // خطا!بهترین کاربرد const برای مقدارهای ابتدایی (مانند true یا عدد) است که نامگذاری آنها خوانایی برنامه را افزایش میدهد.
اگر فقط برای مقدارهای ابتدایی از const استفاده کنید، از سردرگمی بین تغییر مقدار (ممنوع) و تغییر محتوا (مجاز) جلوگیری میشود. این امنترین روش استفاده از const است.
در توابع نیز میتوان متغیر تعریف کرد. پارامترهای تابع مانند متغیرهای داخلی عمل میکنند:
function hello(name) {
console.log(`Hello, ${name}.`);
}
hello("Kyle"); // Hello, Kyleمتغیر hello در دامنهٔ بیرونی تعریف میشود، اما name فقط درون تابع قابلدسترسی است.
در بلوک catch نیز میتوان متغیر تعریف کرد که فقط در همان بلوک معتبر است:
try {
someError();
}
catch (err) {
console.log(err);
}متغیر err مانند let عمل میکند و فقط درون catch قابلدسترسی است.
در جاوااسکریپت، متغیرها با var، let یا const تعریف میشوند. هرکدام رفتار خاصی در محدوده و قابلیت تغییر دارند. انتخاب مناسب بین آنها به نیاز برنامه بستگی دارد. همچنین متغیرها در توابع و بلوکهای catch نیز قابلتعریفاند. شناخت دقیق این تفاوتها، پایهای مهم برای نوشتن کدهای قابلنگهداری و خوانا است.