يشير "النطاق" إلى السياق الحالي للتنفيذ حيث يمكن للشفرة أن تشير أو "ترى" القيم والتعبيرات. يمكن الوصول إلى المتغيرات والكائنات والوظائف من أجزاء مختلفة من الكود بناءً على نطاقاتها.

في JavaScript ، يمكن أن يكون للمتغيرات والكائنات والوظائف نطاق عام أو نطاق وحدة نمطية أو نطاق كتلة أو نطاق وظيفة.

النطاق العالمي في JavaScript

أي قيمة يتم الإعلان عنها خارج دالة أو كتلة في برنامج نصي لها نطاق عالمي ويمكن لأي ملف نصي آخر في برنامجك الوصول إليها.

على سبيل المثال ، إعلان متغير عام في ملف واحد:

// index.js
دع globalVariable = "بعض القيمة"

يعني أن أي برنامج نصي آخر في برنامجك يمكنه الوصول إليه:

// otherScript.js
وحدة التحكم.log (globalVariable) // بعض القيمة

تعريف متغيرات جافا سكريبت في النطاق العالمي ممارسة سيئة لأنها يمكن أن تؤدي إلى تلوث مساحة الأسماء. مساحة الاسم العامة هي المساحة العلوية لجافا سكريبت التي تحتوي على المتغيرات والكائنات والوظائف. في المستعرض ، يتم إرفاقه بملف نافذة او شباك كائن ، بينما يستخدم NodeJS كائنًا باسم عالمي.

يمكن أن يؤدي تلويث مساحة الاسم العالمية إلى تضارب الأسماء. هذا هو الموقف الذي تحاول فيه التعليمات البرمجية استخدام نفس اسم المتغير لأشياء مختلفة في نفس مساحة الاسم. غالبًا ما تتم مصادفة تضاربات الأسماء في المشاريع الكبيرة التي تستخدم العديد من مكتبات الجهات الخارجية.

instagram viewer

نطاق الوحدة

الوحدة النمطية هي ملف مستقل يقوم بتغليف وتصدير أجزاء من التعليمات البرمجية للوحدات النمطية الأخرى في المشروع لاستخدامها. يتيح لك تنظيم قاعدة التعليمات البرمجية الخاصة بك والحفاظ عليها بشكل أكثر كفاءة.

إضفاء الطابع الرسمي على وحدات ES نمط وحدة جافا سكريبت في JavaScript في عام 2015.

يتم تحديد نطاق المتغيرات التي تعلنها في وحدة نمطية لتلك الوحدة ، مما يعني أنه لا يمكن لأي جزء آخر من البرنامج الوصول إليها.

يمكنك فقط استخدام متغير تم الإعلان عنه في وحدة نمطية خارجها إذا قامت الوحدة بتصدير هذا المتغير باستخدام الامتداد يصدّر كلمة رئيسية. يمكنك بعد ذلك استيراد هذا الاسم إلى وحدة نمطية أخرى باستخدام امتداد يستورد كلمة رئيسية.

إليك مثال يوضح تصدير فئة:

// index.js
يصدّرصف دراسيفو{
البناء(property_1، property_2) {
هذه.property_1 = property_1
هذه.property_2 = property_2
}
}

وإليك كيفية استيراد هذه الوحدة واستخدام الخاصية التي تصدرها:

// someModule.js
يستورد {Foo} من "./index.js"

شريط const = Foo جديد ('فو', 'شريط')

وحدة التحكم.log (bar.property_1) // foo

لا يتم التصريح عن الملفات كوحدات نمطية افتراضيًا في JavaScript.

في JavaScript من جانب العميل ، يمكنك إعلان البرنامج النصي كوحدة نمطية عن طريق تعيين يكتب يعزو إلى وحدة على ال النصي بطاقة شعار:

<نوع البرنامج النصي ="وحدة" src ="index.js"></script>

في NodeJS ، يمكنك إعلان البرنامج النصي كوحدة نمطية عن طريق تعيين يكتب الملكية ل وحدة في الخاص بك package.json ملف:

{
"يكتب": "وحدة"
}

نطاق الكتلة

الكتلة في JavaScript هي المكان الذي يبدأ فيه زوج من الأقواس المتعرجة وينتهي.

تم الإعلان عن المتغيرات داخل الكتلة باستخدام الامتداد يترك، و مقدار ثابت يتم تحديد نطاق الكلمات الرئيسية لهذه الكتلة ، مما يعني أنه لا يمكنك الوصول إليها خارجها. لا ينطبق هذا النطاق على المتغيرات المعلنة باستخدام فار الكلمة الأساسية:

{ // بداية الكتلة
كونست واحد = '1'
دع اثنين = '2'
فار ثلاثة = '3'
} // نهاية الكتلة

وحدة التحكم.log (واحد) // يلقي خطأ

وحدة التحكم.log (ثلاثة) // "3"

يمكن الوصول إلى المتغيرات الموجودة في الكتلة أعلاه والمُعلنة على أنها ثابتة أو let فقط داخل الكتلة. ومع ذلك ، يمكنك الوصول إلى المتغير الذي تم الإعلان عنه باستخدام ملف فار الكلمات الرئيسية خارج الكتلة.

نطاق الوظيفة

يشار إلى المتغيرات المعلنة داخل دالة عادة بالمتغيرات المحلية ويتم تحديد نطاقها للوظيفة. لا يمكنك الوصول إليها خارج الوظيفة. ينطبق هذا النطاق على المتغيرات المُعلنة بامتداد فار, يترك، و مقدار ثابت الكلمات الدالة.

نظرًا لأن المتغيرات المعلنة في دالة محلية بالنسبة للدالة ، يمكن إعادة استخدام أسماء المتغيرات. تُعرف إعادة استخدام أسماء المتغيرات ذات النطاق الوظيفي باسم التظليل المتغير ، ويقال إن المتغير الخارجي "مظلل".

فمثلا:

وظيفةتتضاعف() {
يترك واحد = 1
فار اثنان = 2
مقدار ثابت ثلاثة = 3

إرجاع واحد اثنين ثلاثة
}

// التظليل المتغير
مقدار ثابت ثلاثة = ثلاثة // لا يخطئ

إن فهم قواعد تحديد النطاق أمر حيوي

إن فهم النطاقات المتاحة في JavaScript يجعل من السهل عليك تجنب الأخطاء. تعد محاولة الوصول إلى متغير غير متوفر في نطاق معين مصدرًا ناضجًا للأخطاء.

يتضمن فهم النطاق أيضًا مفاهيم مثل تلوث مساحة الاسم العالمية ، والتي يمكن أن تجعل شفرتك أكثر عرضة للأخطاء.