javascript es6 تعلم-javascript برمجة-الويب الفرق-بين-let-و-const-و-var var let const نطاق-المتغير رفع-المتغير
الفرق بين `let` و `const` و `var` في JavaScript
في 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`
الخاصية | var | let | const |
---|---|---|---|
نطاق المتغير | نطاق وظيفي أو عام | نطاق الكتلة | نطاق الكتلة |
إعادة التعيين | يمكن إعادة تعيينه | يمكن إعادة تعيينه | لا يمكن إعادة تعيينه |
إعادة التعريف | يمكن إعادة تعريفه | لا يمكن إعادة تعريفه | لا يمكن إعادة تعريفه |
رفع المتغير | نعم، مع قيمة 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، وقدمنا أفضل الممارسات لاستخدامها في الكود الخاص بك.
Comments
Please log in to leave a comment.