في JavaScript، يمكنك الإعلان عن المتغيرات باستخدام Let وvar وconst. قد تبدو هذه الكلمات الرئيسية متشابهة، ولكن هناك اختلافات رئيسية يمكن أن تؤثر بشكل كبير على كيفية عمل التعليمات البرمجية الخاصة بك. وفي هذه المقالة، سنشرح الاختلافات بينهما ونساعدك على فهم متى تستخدم كل منهما.
فار | يترك | الثابت |
---|---|---|
تم تقديمه في: أصبح متاحًا منذ بداية JavaScript. | تم تقديمه في: تمت إضافته في ES6 (ECMAScript 2015). | تم تقديمه في: تمت إضافته في ES6 (ECMAScript 2015). |
النطاق: نطاق الوظيفة. يمكن الوصول إلى المتغير var من خلال الدالة التي تم الإعلان عنها. | النطاق: على نطاق الكتلة. لا يمكن الوصول إلى متغير Let إلا داخل الكتلة {} حيث تم الإعلان عنه. | النطاق: على نطاق الكتلة، تمامًا مثل السماح. |
سلوك الرفع: يتم رفع متغيرات var ويمكن استخدامها قبل الإعلان عنها (على الرغم من أنها ستكون غير محددة). | سلوك الرفع: دع المتغيرات يتم رفعها ولكن لا تتم تهيئتها، لذلك لا يمكنك استخدامها قبل التصريح. | سلوك الرفع: على غرار Let، يتم رفع متغيرات const ولكن لم يتم تهيئتها، لذلك يجب الإعلان عنها قبل الاستخدام. |
إعادة التصريح: يمكنك إعادة التصريح عن متغير var في نفس النطاق دون أي أخطاء. | إعادة التصريح: لا يمكنك إعادة التصريح عن متغير السماح في نفس النطاق. | إعادة التصريح: لا يمكنك إعادة التصريح عن متغير ثابت، مشابه لـ Let. |
إعادة التعيين: يمكن إعادة تعيين المتغيرات المعلنة باستخدام var. | إعادة التعيين: يمكن أيضًا إعادة تعيين المتغيرات المعلنة باستخدام Let. | إعادة التعيين: لا يمكن إعادة تعيين المتغيرات المعلنة باستخدام const؛ فهي ثابتة. |
إليك مثال يوضح كيف يتصرف var وlet وconst بشكل مختلف:
function userDetails(username) { if (username) { console.log(salary); // Output: undefined (due to hoisting) console.log(age); // Error: ReferenceError: Cannot access 'age' before initialization console.log(country); // Error: ReferenceError: Cannot access 'country' before initialization let age = 30; var salary = 10000; const country = "USA"; // Trying to reassign const // country = "Canada"; // Error: Assignment to constant variable. } console.log(salary); // Output: 10000 (accessible due to function scope) console.log(age); // Error: age is not defined (due to block scope) console.log(country); // Error: country is not defined (due to block scope) } userDetails("John");
شرح المثال:
الرفع باستخدام var: يتم رفع متغير الراتب المعلن بـ var إلى أعلى الوظيفة. ولهذا السبب يمكنك الوصول إليه قبل إعلانه، على الرغم من أن قيمته غير محددة حتى يتم الإسناد.
الرفع باستخدام Let and const: يتم أيضًا رفع متغيرات العمر والبلد، ولكن على عكس var، لم تتم تهيئتهما. وهذا يعني أنه لا يمكنك الوصول إليها قبل إعلانها، مما يؤدي إلى خطأ مرجعي.
نطاق الكتلة: بعد كتلة if، لا يزال من الممكن الوصول إلى الراتب نظرًا لوجود نطاق وظيفة var. ومع ذلك، فإن كلا من العمر (المعلن عنه بـ Let) والبلد (المصرح به بـ const) محددان بنطاق الكتلة، لذا لا يمكن الوصول إليهما خارج الكتلة.
إعادة التعيين باستخدام const: لا يمكن إعادة تعيين المتغيرات المعلنة باستخدام const. في المثال، قد تؤدي محاولة تغيير قيمة البلد إلى حدوث خطأ.
استخدم Let عندما تحتاج إلى متغير يمكن إعادة تعيينه ولكن يجب أن يكون متاحًا فقط ضمن مجموعة محددة من التعليمات البرمجية. يعد هذا مفيدًا لعدادات الحلقات أو الشرطية أو أي متغير سيتم تعديله ولكن ليس من الضروري أن يوجد خارج الكتلة الخاصة به.
استخدم var في المواقف التي تحتاج فيها إلى متغير يمكن الوصول إليه من خلال دالة، على الرغم من أن هذا أقل شيوعًا في JavaScript الحديثة بسبب إدخال Let وconst.
استخدم const عندما تريد الإعلان عن متغير لا ينبغي إعادة تعيينه مطلقًا. يعد هذا مثاليًا للثوابت، مثل قيم التكوين أو البيانات الثابتة، التي يجب أن تظل كما هي خلال التعليمات البرمجية الخاصة بك.
يعد فهم الاختلافات بين var وlet وconst أمرًا ضروريًا لكتابة JavaScript حديثة وفعالة. يُفضل كل من Let وconst عمومًا على var في التعليمات البرمجية الحديثة، حيث يكون const هو الاختيار الأمثل للمتغيرات التي لا ينبغي إعادة تعيينها. من خلال اختيار الكلمة الأساسية الصحيحة، يمكنك كتابة تعليمات برمجية أكثر وضوحًا وموثوقية وأقل عرضة للأخطاء.
باستخدام const للقيم التي لا ينبغي أن تتغير، والسماح للمتغيرات التي قد تتغير داخل كتلة، وتجنب var في معظم الحالات، سيكون كود JavaScript الخاص بك أكثر أمانًا وأسهل في الإدارة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3