var
و let
و const
في JavaScript، يمكن إعلان المتغيرات باستخدام ثلاثة كلمات رئيسية: var
و let
و const
. لكل من هذه الكلمات خصائص مميزة تتعلق بالنطاق، وإعادة الإعلان، وإعادة التعيين، والرفع. فهم هذه الاختلافات أمر بالغ الأهمية لكتابة كود نظيف وخالي من الأخطاء.
var
:var
له نطاق محلي داخل الدالة أو نطاق عالمي. هذا يعني أنه إذا تم إعلان متغير باستخدام var
داخل دالة، فلن يكون متاحًا خارج تلك الدالة. ومع ذلك، إذا تم إعلانه خارج أي دالة، يمكن الوصول إليه في أي مكان في الكود.var globalVar = "أنا متغير عام";
function testVar() {
var localVar = "أنا متغير محلي";
console.log(globalVar); //يمكن الوصول له
console.log(localVar); //يمكن الوصول له
}
testVar();
console.log(globalVar); //يمكن الوصول له
console.log(localVar); // ReferenceError: localVar is not defined
let
و const
:let
و const
لهما نطاق محلي. هذا يعني أنهما متاحان فقط داخل الكتلة الأقرب (المحددة بواسطة {}
)، مثل الحلقات أو الشروط.if (true) {
let blockScopedLet = "أنا محلي في الكتلة";
const blockScopedConst = "أنا أيضًا محلي في الكتلة";
console.log(blockScopedLet); //يمكن الوصول له
console.log(blockScopedConst); //يمكن الوصول له
}
console.log(blockScopedLet); // ReferenceError: blockScopedLet is not defined
console.log(blockScopedConst); // ReferenceError: blockScopedConst is not defined
var
:var
في نفس النطاق دون أي أخطاء.var x = 10;
var x = 20; // لا يوجد خطأ
x = 30; // تمت إعادة التعيين
console.log(x); // 30
let
:let
في نفس النطاق. محاولة القيام بذلك ستؤدي إلى خطأ.let y = 10;
// let y = 20; // SyntaxError: Identifier 'y' has already been declared
y = 30; // تمت إعادة التعيين
console.log(y); // 30
const
:const
في نفس النطاق.const
مناسبًا للثوابت.const z = 10;
// const z = 20; // SyntaxError: Identifier 'z' has already been declared
// z = 30; // TypeError: Assignment to constant variable.
console.log(z); // 10
var
:var
إلى أعلى نطاقها ويتم تهيئتها إلى undefined
. هذا يعني أنه يمكنك الإشارة إليها قبل إعلانها في الكود.console.log(a); // undefined
var a = 5;
console.log(a); // 5
let
و const
:let
و const
أيضًا، لكن لا يتم تهيئتهما. الوصول إليهما قبل إعلانهما يؤدي إلى ReferenceError
.// console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 10;
console.log(b); // 10
// console.log(c); // ReferenceError: Cannot access 'c' before initialization
const c = 20;
console.log(c); // 20
الكلمة الرئيسية | النطاق | إعادة الإعلان | إعادة التعيين | الرفع |
---|---|---|---|---|
var | محلي/عالمي | نعم | نعم | مرفوعة ومهيأة إلى undefined |
let | محلي | لا | نعم | مرفوعة ولكن غير مهيأة |
const | محلي | لا | لا | مرفوعة ولكن غير مهيأة |
const
بشكل افتراضي للمتغيرات التي لا ينبغي أن تتغير. يساعد ذلك في الحفاظ على الثبات ويسهل فهم الكود.let
عندما تعرف أن قيمة المتغير ستتغير، مثل في الحلقات أو الشروط.var
في JavaScript الحديثة، حيث يمكن أن يؤدي إلى الارتباك بسبب نطاقه المحلي وسلوك الرفع.من خلال فهم الاختلافات بين var
و let
و const
، يمكنك كتابة كود JavaScript أنظف وأكثر توقعًا.