"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم النطاق المتداخل في جافا سكريبت: مفهوم البصل كاستعارة

فهم النطاق المتداخل في جافا سكريبت: مفهوم البصل كاستعارة

تم النشر بتاريخ 2024-08-26
تصفح:375

Understanding Nested Scope in Javascript: The Onion Concept as a Metaphor

"لماذا لا يثق المبرمجون في أكوادهم البرمجية؟ لأنها مليئة بالأخطاء - وأحيانًا بالبصل!"

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

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

أولاً، ما هو النطاق؟
في JavaScript، يشير النطاق إلى منطقة التعليمات البرمجية التي يمكن الوصول إلى متغير أو وظيفة معينة فيها. إنه يشبه مدى وصول مصباحك اليدوي إلى غرفة مظلمة، حيث يحدد النطاق ما يمكنك رؤيته (أو استخدامه) في هذا الجزء المحدد من الكود. فكرة النطاق المتداخل هي ببساطة أن أحد النطاقات يمكن أن يتواجد داخل نطاق آخر، مثل طبقات البصل.

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

مثال:

let spiceLevel = "mild"; // Global scope

function makeSalsa(
) {
    console.log(spiceLevel); // Accesses the global variable
}
makeSalsa(); // Output: "mild"

في هذه الحالة، spiceLevel متاح في كل مكان في التعليمات البرمجية الخاصة بك لأنه يقع في النطاق العالمي - الطبقة الخارجية من البصل لدينا.

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

مثال:

function makeSalsa(
) {
    let spiceLevel = "hot"; // Function scope
    console.log(spiceLevel);
}

makeSalsa(); // Output: "hot"
console.log(spiceLevel); // Error: spiceLevel is not defined

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

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

مثال:

function makeSalsa(
) {
    let spiceLevel = "mild";

    if (true) {
        let spiceLevel = "super hot"; // Block scope
        console.log(spiceLevel); // Output: "super hot"
    }

    console.log(spiceLevel); // Output: "mild"
}
makeSalsa();

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

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

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

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

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

"لذا في المرة القادمة التي تكتب فيها JavaScript، تذكر: حتى لو بكيت قليلاً أثناء تقشير الطبقات، فهذا كله جزء من العملية!"

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/koobimdi/understanding-nested-scope-in-javascript-the-onion-concept-as-a-metaphor-1gbk?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang @163.com حذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3