با سلام خدمت همه دوستان و همراهان همیشگی وب سایت فراز کد:
در بخش اول به معرفی متغیر های Let و Var پرداختیم و مزایا و معایب هر کدام را توضیح دادیم در این بخش به معرفی متغیر های Const , Local و Global میپردازیم با ما همراه باشید

متغیرهای Const (ثابت)
متغیرهای Const (مخفف Constant به معنای ثابت) برای تعریف مقادیری استفاده میشوند که تغییرناپذیر هستند. یعنی یکبار مقداردهی میشوند و در طول اجرای برنامه نمیتوان آنها را تغییر داد. این نوع متغیرها معمولاً برای مقادیر ثابت مانند عدد پی (π)، تنظیمات پیشفرض یا مقادیری که در طول برنامه تغییر نمیکنند، استفاده میشوند.
ویژگیها:
مقداردهی اجباری: باید بلافاصله پس از تعریف، مقداردهی شوند.
تغییرناپذیر: پس از تعریف، نمیتوان مقدار آن را تغییر داد.
محدوده دسترسی: بستگی به جایی که تعریف شدهاند دارد (مثلاً اگر داخل یک تابع تعریف شوند، فقط در همان تابع قابل دسترسی هستند).
// مثال ۱: تعریف یک مقدار ثابت
const PI = 3.14159;
console.log(PI); // خروجی: 3.14159
// مثال ۲: تلاش برای تغییر مقدار Const (خطا میدهد)
const MAX_USERS = 100;
MAX_USERS = 200; // خطا! مقدار Const قابل تغییر نیست.
// مثال ۳: استفاده از Const در یک تابع
function calculateArea(radius) {
const PI = 3.14;
return PI * radius * radius;
}
console.log(calculateArea(5)); // خروجی: 78.5
متغیرهای const یکی از ویژگیهای جدیدتر زبان جاوا اسکریپت هستند که از ES6 (ECMAScript 2015) معرفی شدند. این نوع متغیرها به توسعهدهندگان این امکان را میدهند که مقادیری را تعریف کنند که نباید تغییر کنند. در این بخش به بررسی ویژگیها، مزایا و معایب متغیرهای const خواهیم پرداخت.
1.دامنه (Scope) متغیرهای const
متغیرهای تعریفشده با کلمه کلیدی const دارای دامنه بلوکی (block scope) هستند. این بدان معناست که متغیرهای const تنها در بلوکی که در آن تعریف شدهاند، قابل دسترسی هستند. این ویژگی مشابه متغیرهای let است و به توسعهدهندگان این امکان را میدهد که متغیرها را به طور دقیقتری مدیریت کنند.
مثال:
function example() {
const x = 10; // متغیر x در دامنه تابع
if (true) {
const x = 20; // متغیر جدید x در دامنه بلوک
console.log(x); // 20
}
console.log(x); // 10
}
example();
2. عدم تغییر مقدار
متغیرهای const نمیتوانند دوباره مقداردهی شوند. این بدان معناست که شما نمیتوانید مقدار یک متغیر const را پس از تعریف آن تغییر دهید. این ویژگی به جلوگیری از بروز خطاهای ناشی از تغییرات غیرمنتظره در مقادیر کمک میکند.
مثال:
const x = 10;
x = 20; // TypeError: Assignment to constant variable
خطای “TypeError: Assignment to constant variable” به این معنی است که شما سعی کردهاید یک مقدار جدید به یک متغیر از نوع const
اختصاص دهید، در حالی که این کار مجاز نیست.
3. تغییر مقادیر داخلی اشیاء
لازم به ذکر است که اگر یک شیء یا آرایه با const تعریف شود، میتوان مقادیر داخلی آن شیء یا آرایه را تغییر داد، اما نمیتوان خود شیء یا آرایه را دوباره تعریف کرد.
const obj = { name: "John" };
obj.name = "Doe"; // مجاز است
console.log(obj.name); // Doe
// obj = { name: "Jane" }; // خطا: Assignment to constant variable.
خطای “Assignment to constant variable” در جاوااسکریپت به این معنی است که شما سعی کردهاید یک مقدار جدید به یک متغیر از نوع const
اختصاص دهید، در حالی که این کار مجاز نیست. متغیرهای تعریف شده با const
ثابت هستند و پس از مقداردهی اولیه، نمیتوان مقدار جدیدی به آنها اختصاص داد
4. استفاده در Node.js
در Node.js، متغیرهای const به همان شیوهای که در مرورگرها عمل میکنند، کار میکنند. این نوع متغیرها به دلیل عدم تغییر مقدار و دامنه بلوکی، به شدت مورد توجه توسعهدهندگان قرار گرفتهاند و معمولاً در پروژههای جدید توصیه میشوند.
مزایای استفاده از Const
۱. امنیت و جلوگیری از تغییرات ناخواسته
با استفاده از `const`، مطمئن میشوید که مقدار یک متغیر پس از تعریف، تغییرناپذیر است. این ویژگی باعث میشود از تغییرات تصادفی یا ناخواسته در کد جلوگیری شود.
const MAX_USERS = 100;
MAX_USERS = 200; // خطا! مقدار Const قابل تغییر نیست.
۲. خوانایی و قابل فهمتر بودن کد
وقتی از `const` استفاده میکنید، به دیگر توسعهدهندگان (یا حتی خودتان در آینده) این پیام را میرسانید که این مقدار ثابت است و نباید تغییر کند. این موضوع باعث میشود کد شما خوانایی بیشتری داشته باشد.
const TAX_RATE = 0.09; // مشخص است که این مقدار ثابت است.
۳. بهینهسازی توسط موتورهای جاوااسکریپت
موتورهای جاوااسکریپت (مانند V8 در کروم) میتوانند کدهایی که از `const` استفاده میکنند را بهتر بهینهسازی کنند، زیرا میدانند که مقدار این متغیرها تغییر نخواهد کرد.
۴. جلوگیری از اشتباهات رایج
استفاده از `const` از اشتباهات رایجی مانند تغییر مقدار یک متغیر ثابت جلوگیری میکند. این موضوع به ویژه در پروژههای بزرگ که چندین توسعهدهنده روی آن کار میکنند، بسیار مفید است.
معایب استفاده از Const
۱. انعطافپذیری کمتر
از آنجا که مقدار `const` تغییرناپذیر است، اگر نیاز به تغییر مقدار یک متغیر داشته باشید، نمیتوانید از “const”استفاده کنید. در چنین مواردی باید از “let” یا “var” استفاده کنید.
let counter = 0;
counter++; // کار میکند
const fixedCounter = 0;
fixedCounter++; // خطا! مقدار Const قابل تغییر نیست.
۲. محدودیت در مقداردهی
متغیرهای “const” باید بلافاصله پس از تعریف، مقداردهی شوند. یعنی نمیتوانید یک متغیر “const” تعریف کنید و بعداً به آن مقدار اختصاص دهید.
const PI; // خطا! باید بلافاصله مقداردهی شود.
PI = 3.14;
۳. محدودیت در استفاده با آرایهها و اشیا
اگرچه مقدار `const` تغییرناپذیر است، اما اگر مقدار آن یک آرایه یا شیء باشد، همچنان میتوان محتوای آنها را تغییر داد. این موضوع ممکن است باعث سردرگمی شود.
const colors = ["قرمز", "سبز", "آبی"];
colors.push("زرد"); // کار میکند
console.log(colors); // خروجی: ["قرمز", "سبز", "آبی", "زرد"]
const person = { name: "Ali", age: 25 };
person.age = 30; // کار میکند
console.log(person); // خروجی: { name: "Ali", age: 30 }
متغیرهای Local (محلی)
متغیرهای محلی به متغیرهایی اطلاق میشود که در یک تابع یا بلوک خاص تعریف میشوند و تنها در آن دامنه (scope) قابل دسترسی هستند. این نوع متغیرها به توسعهدهندگان این امکان را میدهند که دادهها را به طور موقت ذخیره کنند و از تداخل با متغیرهای دیگر جلوگیری کنند. از ویژگی های متغییر local می توان :
- محدوده دسترسی: فقط در داخل بلوکی که تعریف شدهاند قابل دسترسی هستند.
- تغییرپذیر: میتوان مقدار آنها را تغییر داد.
- مدت عمر کوتاه: پس از اتمام اجرای بلوک کد، از حافظه پاک میشوند.
مثال:
// مثال ۱: متغیر Local داخل یک تابع
function greet() {
let message = "سلام، به وبلاگ ما خوش آمدید!"; // متغیر Local
console.log(message);
}
greet(); // خروجی: سلام، به وبلاگ ما خوش آمدید!
console.log(message); // خطا! message خارج از محدوده تعریف شده است.
// مثال ۲: متغیر Local داخل یک حلقه
for (let i = 0; i < 3; i++) {
let loopMessage = "شماره: " + i; // متغیر Local
console.log(loopMessage);
}
console.log(loopMessage); // خطا! loopMessage خارج از محدوده تعریف شده است.
// مثال ۳: متغیر Local داخل یک شرط
if (true) {
let conditionMessage = "این یک پیام شرطی است"; // متغیر Local
console.log(conditionMessage);
}
console.log(conditionMessage); // خطا! conditionMessage خارج از محدوده تعریف شده است.
دامنه (Scope) متغیرهای محلی
دامنه متغیرهای محلی معمولاً به دامنه تابع (function scope) یا دامنه بلوکی (block scope) بستگی دارد. متغیرهای محلی تعریفشده با var دارای دامنه تابعی هستند، در حالی که متغیرهای تعریفشده با let و const دارای دامنه بلوکی هستند.
function example() {
var x = 10; // متغیر محلی با دامنه تابعی
if (true) {
var x = 20; // همان متغیر x
console.log(x); // 20
}
console.log(x); // 20
}
example();
مثال – دامنه بلوکی:
function example() {
let x = 10; // متغیر محلی با دامنه تابعی
if (true) {
let x = 20; // متغیر جدید x در دامنه بلوک
console.log(x); // 20
}
console.log(x); // 10
}
example();
مزایای استفاده از متغیرهای محلی
۱. محدوده دسترسی کنترلشده (Scope)
متغیرهای محلی فقط در داخل بلوکی که تعریف شدهاند (مانند یک تابع، حلقه یا شرط) قابل دسترسی هستند. این ویژگی از تداخل نامها (Name Collision) و تغییرات ناخواسته در سایر بخشهای برنامه جلوگیری میکند.
مثال:
function printMessage() {
let message = "این یک متغیر محلی است"; // متغیر محلی
console.log(message); // کار میکند
}
printMessage();
console.log(message); // خطا! message خارج از محدوده تعریف شده است.
۲. بهینهسازی حافظه
متغیرهای محلی پس از اتمام اجرای بلوک کد (مثلاً پایان یک تابع) از حافظه پاک میشوند. این موضوع باعث میشود حافظه بهینهتر مدیریت شود، به ویژه در برنامههای بزرگ.
مثال:
function calculateSum(a, b) {
let result = a + b; // متغیر محلی
return result;
}
console.log(calculateSum(2, 3)); // خروجی: 5
// متغیر result پس از اتمام تابع از حافظه پاک میشود.
۳. جلوگیری از تغییرات ناخواسته
از آنجا که متغیرهای محلی فقط در محدوده تعریفشدهشان قابل دسترسی هستند، احتمال تغییرات ناخواسته توسط سایر بخشهای برنامه کاهش مییابد.
مثال:
let globalVar = "متغیر سراسری";
function updateVar() {
let globalVar = "متغیر محلی"; // این متغیر، متغیر سراسری را تغییر نمیدهد.
console.log(globalVar); // خروجی: متغیر محلی
}
updateVar();
console.log(globalVar); // خروجی: متغیر سراسری
۴. خوانایی و سازماندهی کد
استفاده از متغیرهای محلی باعث میشود کد شما خوانا و منظمتر شود، زیرا هر بخش از کد متغیرهای مربوط به خود را دارد و نیازی به پیگیری متغیرهای سراسری نیست.
معایب استفاده از متغیرهای محلی
۱. محدودیت در دسترسی
متغیرهای محلی فقط در محدوده تعریفشدهشان قابل دسترسی هستند. اگر نیاز به استفاده از یک متغیر در چندین بخش از برنامه داشته باشید، نمیتوانید از متغیرهای محلی استفاده کنید.
مثال:
function printMessage() {
let message = "این یک متغیر محلی است";
console.log(message); // کار میکند
}
console.log(message); // خطا! message خارج از محدوده تعریف شده است.
۲. زندگی کوتاه (Short Lifetime)
متغیرهای محلی فقط در طول اجرای بلوک کد (مثلاً یک تابع) وجود دارند و پس از اتمام آن بلوک، از حافظه پاک میشوند. اگر نیاز به ذخیره دادهها برای مدت طولانیتر داشته باشید، استفاده از متغیرهای محلی مناسب نیست.
مثال:
function counter() {
let count = 0; // متغیر محلی
count++;
console.log(count);
}
counter(); // خروجی: 1
counter(); // خروجی: 1 (مقدار count هر بار از اول شروع میشود)
۳. مشکل در اشکالزدایی (Debugging)
اگر متغیرهای محلی به درستی استفاده نشوند، ممکن است باعث ایجاد اشکالاتی شوند که تشخیص آنها سخت باشد. به ویژه اگر نامهای مشابه در محدودههای مختلف استفاده شوند.
مثال:
function example() {
let x = 10;
if (true) {
let x = 20; // این x با x بیرون متفاوت است.
console.log(x); // خروجی: 20
}
console.log(x); // خروجی: 10
}
example();
چه زمانی از متغیرهای محلی استفاده کنیم؟
- زمانی که نیاز به ذخیره موقت دادهها در یک بخش خاص از برنامه دارید.
- زمانی که میخواهید از تداخل نامها و تغییرات ناخواسته جلوگیری کنید.
- زمانی که میخواهید حافظه بهینهتر مدیریت شود
متغیرهای سراسری (Global Variables)
متغیرهای سراسری، متغیرهایی هستند که در بالاترین سطح یک برنامه تعریف میشوند و در تمام بخشهای برنامه (اعم از توابع، حلقهها، شرطها و …) قابل دسترسی هستند. این متغیرها تا زمانی که برنامه در حال اجرا است، در حافظه باقی میمانند.
تعریف متغیرهای جهانی
در جاوا اسکریپت، اگر یک متغیر خارج از هر تابعی تعریف شود، به عنوان یک متغیر جهانی شناخته میشود. همچنین، در Node.js میتوان از شیء global برای تعریف متغیرهای جهانی استفاده کرد.
مثال:
var globalVar = "Hello, World!"; // متغیر جهانی
function example() {
console.log(globalVar); // دسترسی به متغیر جهانی
}
example(); // "Hello, World!"
استفاده از شیء global در Node.js
در محیط Node.js، برای تعریف متغیرهای جهانی میتوان از شیء global استفاده کرد. این روش به شما این امکان را میدهد که متغیرها را به طور خاص برای محیط Node.js تعریف کنید.
مثال:
global.globalVar = "Hello, Node.js!";
function example() {
console.log(global.globalVar); // دسترسی به متغیر جهانی
}
example(); // "Hello, Node.js!"
مزایای استفاده از متغیرهای سراسری
دسترسی آسان در کل برنامه
متغیرهای سراسری در تمام بخشهای برنامه قابل دسترسی هستند. این یعنی شما میتوانید به راحتی از آنها در هر تابع، حلقه یا بلوک کدی استفاده کنید.
مثال:
let userName = "Ali"; // متغیر سراسری
function greetUser() {
console.log("سلام، " + userName); // استفاده از متغیر سراسری
}
greetUser(); // خروجی: سلام، Ali
ذخیره دادههای مشترک
متغیرهای سراسری برای ذخیره دادههایی که باید در چندین بخش از برنامه استفاده شوند، بسیار مفید هستند. مثلاً تنظیمات برنامه، وضعیت کاربر یا دادههای مشترک.
مثال:
let isLoggedIn = false; // متغیر سراسری
function login() {
isLoggedIn = true;
console.log("وضعیت ورود: " + isLoggedIn);
}
login(); // خروجی: وضعیت ورود: true
سادگی در استفاده
استفاده از متغیرهای سراسری ساده است و نیاز به تعریف متغیر در هر تابع یا بلوک کد ندارد. این موضوع باعث میشود کدنویسی سریعتر و راحتتر شود.
معایب استفاده از متغیرهای سراسری
۱. تداخل نامها (Name Collision)
اگر در بخشهای مختلف برنامه از نامهای مشابه برای متغیرهای سراسری و محلی استفاده کنید، ممکن است باعث ایجاد تداخل و اشکالات ناخواسته شوید. این مشکل به ویژه در پروژههای بزرگ یا زمانی که از کتابخانههای خارجی استفاده میکنید، بیشتر دیده میشود.
مثال:
let counter = 0; // متغیر سراسری
function incrementCounter() {
let counter = 10; // متغیر محلی
counter++;
console.log(counter); // خروجی: 11
}
incrementCounter();
console.log(counter); // خروجی: 0 (متغیر سراسری تغییر نکرده است)
۲. اشکالزدایی سختتر
از آنجا که متغیرهای سراسری در هر جایی از برنامه قابل تغییر هستند، ردیابی تغییرات و اشکالزدایی آنها میتواند سختتر باشد. به ویژه اگر چندین تابع یا بخش از برنامه روی یک متغیر سراسری کار کنند.
مثال:
let total = 0; // متغیر سراسری
function addToTotal(value) {
total += value;
}
function resetTotal() {
total = 0;
}
addToTotal(10);
resetTotal(); // ممکن است فراموش کنید این تابع را صدا بزنید!
console.log(total); // خروجی: 0
۳. مصرف بیشتر حافظه
متغیرهای سراسری تا زمانی که برنامه در حال اجرا است، در حافظه باقی میمانند. این موضوع میتواند باعث مصرف بیش از حد حافظه، به ویژه در برنامههای بزرگ شود.
مثال:
let largeData = [/* آرایهای بزرگ از دادهها */]; // متغیر سراسری
// این دادهها تا پایان برنامه در حافظه باقی میمانند.
۴. کاهش خوانایی و سازماندهی کد
استفاده بیش از حد از متغیرهای سراسری میتواند باعث کاهش خوانایی و سازماندهی کد شود. زیرا ممکن است نتوانید به راحتی تشخیص دهید کدام بخش از برنامه روی یک متغیر سراسری تأثیر میگذارد.
چه زمانی از متغیرهای سراسری استفاده کنیم؟
زمانی که نیاز به ذخیره دادههایی دارید که باید در چندین بخش از برنامه استفاده شوند (مانند تنظیمات، وضعیت کاربر و …).
زمانی که میخواهید دادهها را بین توابع یا ماژولهای مختلف به اشتراک بگذارید.
چه زمانی از متغیرهای سراسری اجتناب کنیم؟
زمانی که میخواهید کد شما خوانا و قابل نگهداری باشد.
زمانی که میخواهید از تداخل نامها و تغییرات ناخواسته جلوگیری کنید.
زمانی که میخواهید حافظه بهینهتر مدیریت شود.
سوالات متداول
-
تفاوت بین
var
،let
وconst
چیست؟var
: دارای function scope است (یعنی فقط در داخل تابعی که تعریف شده محدود میشود).
قابل hoisting است (یعنی حتی اگر قبل از تعریف استفاده شود، خطا نمیدهد اما مقدارundefined
برمیگرداند).
مقدار آن قابل تغییر است.let
: دارای block scope است (یعنی فقط در داخل بلوک{}
که تعریف شده محدود میشود).
قابل hoisting نیست (اگر قبل از تعریف استفاده شود، خطا میدهد).
مقدار آن قابل تغییر است.const
: دارای block scope است.
قابل hoisting نیست.
مقدار آن ثابت است و پس از تعریف، قابل تغییر نیست (به جز در مورد اشیا و آرایهها که میتوان محتوای آنها را تغییر داد). -
آیا میتوان مقدار یک متغیر
const
را تغییر داد؟اگر متغیر
const
یک مقدار ساده (مانند عدد، رشته یا بولین) داشته باشد، قابل تغییر نیست.
اما اگرconst
یک شیء یا آرایه باشد، میتوان ویژگیها یا عناصر آن را تغییر داد. فقط نمیتوان خود متغیر را به یک شیء یا آرایه جدید اختصاص داد.