الدرس الثالث: المتغيرات في JavaScript – أنواعها وأفضل الممارسات
المتغيرات هي اللبنات الأساسية لأي لغة برمجة، وفي JavaScript تُستخدم لتخزين البيانات بأنواعها المختلفة مثل الأرقام، النصوص، الكائنات، والمصفوفات.
تسمح المتغيرات للمطورين بالاحتفاظ بالقيم وإعادة استخدامها أو تعديلها أثناء تنفيذ البرنامج، مما يجعل الكود أكثر ديناميكية ومرونة.
فهم كيفية تعريف المتغيرات واختيار النوع المناسب (مثل var
، let
، وconst
) يساعد في كتابة كود نظيف، قابل للصيانة، وفعّال.

في JavaScript هناك ثلاثة أنواع رئيسية من المتغيرات:
- var: النوع التقليدي لتعريف المتغيرات في JavaScript، يسمح بإعادة تعريف المتغير وإعادة تعيين قيمته. يمتلك نطاقًا وظيفيًا (function scope)، مما يعني أن المتغير يكون متاحًا داخل الوظيفة التي عُرِف فيها فقط. قد يؤدي هذا إلى سلوك غير متوقع خاصة في الحلقات أو الشروط بسبب عدم وجود نطاق كتلي.
- let: تم تقديمه مع معيار ES6 كبديل لـ
var
، ويتميز بنطاق كتلي (block scope)، أي أن المتغير يكون متاحًا فقط داخل الكتلة التي عُرِف فيها بين الأقواس {...}. لا يمكن إعادة تعريف المتغير داخل نفس النطاق، لكنه يسمح بإعادة تعيين القيمة. - const: يستخدم لتعريف متغير ثابت القيمة لا يمكن تغييرها بعد تعريفه.
يمتلك أيضًا نطاقًا كتليًا مثل
let
. يجب تعيين قيمة عند تعريف المتغير وإلا يحدث خطأ أثناء التنفيذ.
اختيار نوع المتغير المناسب يسهم في تحسين أمان الكود وتقليل الأخطاء. مثلاً، استخدم const
للثوابت التي لا تتغير، وlet
للمتغيرات التي تتغير قيمتها مع الوقت، وتجنب var
إلا للضرورة.
للمزيد من التفاصيل، يمكنك الاطلاع على هذه المصادر المفيدة: MDN Web Docs - المتغيرات في JavaScript | JavaScript.info - let و const
ما هي المتغيرات؟
المتغير هو بمثابة صندوق يُخزن قيمة معينة يمكن تغييرها أو استخدامها في العمليات الحسابية أو النصية داخل البرنامج. تُعد المتغيرات من العناصر الأساسية في أي لغة برمجة، وفي JavaScript تُستخدم لتخزين بيانات مثل الأرقام، النصوص، الكائنات، والمصفوفات.
يمكنك إنشاء متغير في JavaScript باستخدام إحدى الكلمات المفتاحية التالية:
- var: كلمة مفتاحية قديمة لتصريح المتغيرات، وكانت تُستخدم في الإصدارات السابقة من JavaScript. تتميز بنطاق وظيفي (function scope) مما قد يؤدي إلى بعض السلوكيات غير المتوقعة عند إعادة تعريف المتغيرات.
-
let: كلمة مفتاحية أحدث وأفضل من
var
، تم تقديمها مع معيار ES6. تسمح بإعادة إسناد القيم للمتغير ولكنها تحكم نطاق المتغير ضمن الكتلة (block scope)، مما يعزز التحكم في الكود ويقلل الأخطاء. - const: تُستخدم لتعريف متغير ثابت لا يمكن تغيير قيمته بعد التصريح به. يجب تعيين القيمة عند تعريف المتغير، ويتميز أيضًا بنطاق كتلي، ويُستخدم عادة للثوابت والقيم التي لا تتغير.
استخدام النوع المناسب من المتغيرات يعزز جودة الكود ويجعل البرمجة أكثر أمانًا ووضوحًا، خاصة في المشاريع الكبيرة والمعقدة.
أمثلة على تعريف المتغيرات في JavaScript
// باستخدام var var الاسم = "خالد"; // باستخدام let let العمر = 25; // باستخدام const const الدولة = "المغرب";
في المثال أعلاه، قمنا بتعريف ثلاث متغيرات بأنواع مختلفة:
- var
يُستخدم لتعريف متغير يمكن إعادة تعيينه وإعادة تعريفه داخل نفس النطاق.
- let
لتعريف متغير يمكن تغيير قيمته، لكن لا يمكن إعادة تعريفه في نفس النطاق.
- const
لتعريف متغير ثابت لا يمكن تغيير قيمته بعد التعيين الأولي.
تذكّر أن استخدام let
وconst
يُعتبر أفضل ممارسة في البرمجة الحديثة لما لهما من تحكم أدق في نطاق المتغيرات وتحسينات في أمان الكود.
الفرق بين var
و let
و const
في JavaScript
-
النطاق (Scope):
-
var
يمتلك نطاق دالي (Function Scoped)، أي أن المتغير يبقى متاحًا داخل الدالة التي تم تعريفه فيها فقط، حتى لو كان داخل كتلة شرطية أو حلقة. -let
وconst
يمتلكان نطاق كتلي (Block Scoped)، أي أن المتغير يبقى متاحًا فقط داخل الكتلة { } التي تم تعريفه فيها. -
إعادة التعريف (Redeclaration):
-
var
يمكن إعادة تعريفه داخل نفس النطاق بدون خطأ، مما قد يؤدي إلى مشاكل في الكود. -let
وconst
لا يمكن إعادة تعريفهما في نفس النطاق، ويؤدي ذلك إلى ظهور خطأ. -
إعادة الإسناد (Reassignment):
-
var
وlet
يمكن تغيير قيمتهما بعد تعريفهما. -const
لا يمكن تغيير قيمته بعد التعيين الأولي، فهو ثابت. -
التعريف الأولي:
-
const
يجب تعيين قيمة عند تعريفه، وإلا يظهر خطأ. -var
وlet
يمكن تعريفهما بدون تعيين قيمة مبدئية.
أفضل الممارسات عند استخدام المتغيرات في JavaScript
-
استخدم
const
كلما كان ذلك ممكنًا: عند تعريف متغيرات لن تتغير قيمتها، مثل الثوابت أو الإعدادات، استخدمconst
للحفاظ على أمان الكود ومنع التغييرات العرضية. -
استخدم
let
لتلك المتغيرات التي تحتاج إلى تغيير قيمتها: في الحالات التي تتغير فيها البيانات، مثل العدادات أو الحالات المتغيرة، استخدمlet
للاستفادة من نطاق الكتلة وتقليل الأخطاء. -
تجنب استخدام
var
في الكود الحديث: رغم أنvar
لا يزال مدعومًا، فإن استخدامlet
وconst
يوفران تحكمًا أفضل في نطاق المتغيرات ويقللان الأخطاء الناتجة عن إعادة التعريف أو التسرب. -
اختر أسماء متغيرات واضحة ومعبرة:
استخدم أسماء تعكس محتوى المتغير والغرض منه بطريقة مفهومة، مثل
userAge
بدلاً منx
أوa
. هذا يُسهل صيانة الكود وفهمه من قبل الآخرين أو حتى نفسك لاحقًا. - تجنب استخدام المتغيرات العالمية غير الضرورية: كلما أمكن، عرّف المتغيرات ضمن نطاقات محددة لتقليل التضارب وتحسين أمان الكود.
- استخدم التعليقات التوضيحية عند الحاجة: لتفسير سبب استخدام نوع معين من المتغيرات أو أي تفاصيل خاصة بالكود، مما يساعد في توثيق الكود للفرق البرمجية.
let
و const
لا تُرفع (hoisting) بنفس طريقة var
.
لذا يجب التأكد من تعريفها قبل استخدامها لتجنب أخطاء التنفيذ مثل ReferenceError
.
هذا السلوك يعزز أمان الكود ويجعل عملية تتبع الأخطاء أسهل.
هل يمكن استخدام const
مع الكائنات؟
نعم! يمكنك استخدام const
لتعريف الكائنات في JavaScript، لكن من المهم أن تعرف أن const
يمنع فقط إعادة تعيين المتغير ليشير إلى كائن جديد، ولا يمنع تعديل خصائص الكائن نفسه.
const user = { name: "Ali", age: 30 }; user.age = 31; // مسموح ✅ — يمكن تعديل خصائص الكائن user = { name: "Sara" }; // غير مسموح ❌ — لا يمكن إعادة تعيين المتغير لكائن جديد
هذا يعني أن الكائن user
نفسه ثابت في المرجع، لكن محتوياته قابلة للتغيير.
للحفاظ على ثبات خصائص الكائن، يمكنك استخدام وظائف مثل Object.freeze()
لجعل الكائن غير قابل للتعديل.
للمزيد من المعلومات حول هذا الموضوع، راجع: MDN - const و MDN - Object.freeze()
let
وconst
بذكاء لتحصل على كود منظم، واضح، وآمن من الأخطاء.