في JavaScript، توجد ثلاثة طرق رئيسية لإعلان المتغيرات: var و let و const. كل طريقة لها استخداماتها وقواعدها الخاصة. في هذا الدليل، سنتناول الفرق بينها بالتفصيل.
1. المتغيرات باستخدام var
الوصف:
varهي الطريقة القديمة لتعريف المتغيرات في JavaScript وكانت تُستخدم قبل ECMAScript 6 (ES6).- نطاق المتغير: المتغيرات المُعلنة باستخدام
varتكون ذات نطاق وظيفي أو عام (Global/Function Scope). - إعادة التعريف: يمكنك إعادة تعريف المتغيرات المُعلنة باستخدام
varدون حدوث أخطاء.
مثال:
var x = 5;
if (true) {
var x = 10; // إعادة تعريف x
console.log(x); // 10
}
console.log(x); // 10 (الـ var تم تعريفه بالنطاق العام)خصائص var:
- نطاق الوظيفة: المتغيرات التي يتم تعريفها باستخدام
varتكون مرتبطة بالوظيفة إذا كانت داخل دالة، أو تصبح عامة إذا كانت خارج أي دالة. - رفع المتغير (Hoisting): المتغيرات المُعلنة باستخدام
varيتم رفعها إلى أعلى النطاق الوظيفي أو العام قبل تنفيذ الكود. أي يمكن استخدام المتغير قبل أن يتم إعلانه، لكنه سيعطى قيمةundefined.
مثال على رفع المتغير:
console.log(y); // undefined (تم رفع y لكن لم يُعطى قيمة بعد)
var y = 7;2. المتغيرات باستخدام let
الوصف:
letتم تقديمها في ES6 وهي طريقة أفضل لتعريف المتغيرات مقارنةً بـvar.- نطاق المتغير: المتغيرات المُعلنة باستخدام
letتكون ذات نطاق كتلة (Block Scope). - إعادة التعريف: لا يمكن إعادة تعريف نفس المتغير باستخدام
letداخل نفس النطاق.
مثال:
let a = 5;
if (true) {
let a = 10; // تعريف جديد داخل كتلة if
console.log(a); // 10
}
console.log(a); // 5 (القيمة خارج الكتلة لم تتأثر)خصائص let:
- نطاق الكتلة: المتغيرات التي يتم تعريفها باستخدام
letتكون محصورة داخل الكتلة التي تم تعريفها فيها (مثل داخلifأوfor). - رفع المتغير: يتم رفع المتغيرات المُعلنة باستخدام
let، لكن لا يمكن الوصول إليها قبل الإعلان عنها بشكل صريح؛ أي أن استخدامها قبل الإعلان يؤدي إلى خطأ.
مثال على خطأ الرفع:
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 7;3. المتغيرات باستخدام const
الوصف:
constتم تقديمها في ES6 وتستخدم لتعريف المتغيرات التي لا تتغير قيمتها بعد الإعلان عنها.- نطاق المتغير: مثل
let، المتغيرات المُعلنة باستخدامconstتكون ذات نطاق كتلة. - إعادة التعيين: لا يمكن إعادة تعيين أو تعديل قيمة المتغير المُعرّف باستخدام
const.
مثال:
const PI = 3.14159;
console.log(PI); // 3.14159
PI = 3.14; // TypeError: Assignment to constant variable.خصائص const:
- نطاق الكتلة: المتغيرات المُعلنة باستخدام
constتكون محصورة داخل الكتلة التي تم تعريفها فيها. - الثبات: بعد تعيين قيمة للمتغير المُعلَن باستخدام
const، لا يمكن تغيير هذه القيمة. - المتغيرات المعقدة: بالنسبة للمتغيرات التي تحتوي على كائنات أو مصفوفات، يمكنك تعديل خصائص الكائن أو عناصر المصفوفة، ولكن لا يمكن إعادة تعيين الكائن أو المصفوفة نفسها.
مثال على كائنات ومصفوفات مع const:
const myArray = [1, 2, 3];
myArray.push(4); // يمكن تعديل المصفوفة
console.log(myArray); // [1, 2, 3, 4]
const myObject = { name: "John" };
myObject.age = 30; // يمكن تعديل خصائص الكائن
console.log(myObject); // { name: "John", age: 30 }4. مقارنة عامة بين var و let و const
<table border="1" cellpadding="10" cellspacing="0"> <thead> <tr> <th>الخاصية</th> <th><code>varletconstنطاق المتغير نطاق وظيفي أو عام نطاق الكتلة نطاق الكتلة إعادة التعيين يمكن إعادة تعيينه يمكن إعادة تعيينه لا يمكن إعادة تعيينه إعادة التعريف يمكن إعادة تعريفه لا يمكن إعادة تعريفه لا يمكن إعادة تعريفه رفع المتغير نعم، مع قيمة undefinedنعم، لكن لا يمكن الوصول إليه قبل التعيين نعم، لكن لا يمكن الوصول إليه قبل التعيين ثبات القيمة لا لا نعم
5. متى تستخدم كل منها؟
- استخدم
constعندما تكون متأكدًا أن القيمة لن تتغير بعد التعيين. - استخدم
letعندما تتوقع أن تتغير قيمة المتغير، خاصة داخل نطاق كتلة (مثل الحلقات أو الشروط). - تجنب استخدام
varإذا كان ذلك ممكنًا؛ فهو قد يسبب أخطاء بسبب نطاقه العام وسلوكه مع الرفع.
الخلاصة:
في JavaScript، var، let، و const كل منها لها خصائصها المميزة. var يستخدم بشكل أقل الآن بسبب مشاكله المتعلقة بالنطاق والرفع، بينما let و const يفضل استخدامهما في معظم الحالات. const يُستخدم للثوابت، وlet يُستخدم عندما تتغير قيمة المتغير.
أمثلة عملية:
// استخدام let و const مع الحلقات
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
const name = "John";
if (true) {
let name = "Doe";
console.log(name); // Doe
}
console.log(name); // Johnبهذا الدليل الشامل، تعرفنا على الفرق بين let و const و var في JavaScript، وقدمنا أفضل الممارسات لاستخدامها في الكود الخاص بك.