~3 دقیقه مطالعه • بروزرسانی ۲۲ مهر ۱۴۰۴
مقدمه
در برنامههای جاوااسکریپت، مقدارها میتوانند بهصورت مستقیم (literal) یا از طریق متغیرها ظاهر شوند. متغیرها مانند ظرفهایی هستند که مقدار را در خود نگه میدارند. برای استفاده از متغیر، ابتدا باید آن را تعریف کرد. جاوااسکریپت چند روش مختلف برای تعریف متغیر دارد که هرکدام رفتار خاصی دارند.
تعریف با var
کلیدواژه var متغیر را در دامنهٔ تابع یا دامنهٔ سراسری تعریف میکند:
var name = "Kyle";
var age;متغیر تعریفشده با var در کل تابع (یا فایل) قابلدسترسی است، حتی خارج از بلوکهایی مانند if.
تعریف با let
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
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 استفاده کنید، از سردرگمی بین تغییر مقدار (ممنوع) و تغییر محتوا (مجاز) جلوگیری میشود. این امنترین روش استفاده از const است.
تعریف متغیر در توابع
در توابع نیز میتوان متغیر تعریف کرد. پارامترهای تابع مانند متغیرهای داخلی عمل میکنند:
function hello(name) {
console.log(`Hello, ${name}.`);
}
hello("Kyle"); // Hello, Kyleمتغیر hello در دامنهٔ بیرونی تعریف میشود، اما name فقط درون تابع قابلدسترسی است.
تعریف متغیر در catch
در بلوک catch نیز میتوان متغیر تعریف کرد که فقط در همان بلوک معتبر است:
try {
someError();
}
catch (err) {
console.log(err);
}متغیر err مانند let عمل میکند و فقط درون catch قابلدسترسی است.
جمعبندی
در جاوااسکریپت، متغیرها با var، let یا const تعریف میشوند. هرکدام رفتار خاصی در محدوده و قابلیت تغییر دارند. انتخاب مناسب بین آنها به نیاز برنامه بستگی دارد. همچنین متغیرها در توابع و بلوکهای catch نیز قابلتعریفاند. شناخت دقیق این تفاوتها، پایهای مهم برای نوشتن کدهای قابلنگهداری و خوانا است.
نوشته و پژوهش شده توسط دکتر شاهین صیامی