freeCodeCamp/guide/arabic/javascript/tutorials/using-anonymous-functions-f.../index.md

8.8 KiB

title localeTitle
Using Anonymous Functions for Private Namespacing in Your JavaScript Apps استخدام وظائف مجهول ل Namespacing الخاصة في تطبيقات جافا سكريبت

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

الرجاء ملاحظة تشير هذه المقالة دالات self-executing مجهول. إذا لم تكن على دراية بما هو موجود ، فالرجاء قراءة هذا المقال الممتاز من تأليف نوح ستوكس: تنفيذ المهام المجهولة ذاتيا أو كيفية كتابة جافا سكريبت نظيفة . هذه المادة سوف تذهب في التفاصيل حول وظائف ذاتية المجهول.

ما هو مساحة الاسم؟

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

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

دعونا نلقي نظرة على مثال على كيفية استخدام مساحة الاسم العالمية لتطوير اللعبة هي فكرة سيئة.

لنفترض أن لدينا لعبة تتعقب النقاط التي يملكها اللاعب:

var points = 0;

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

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

points = 34750925489459203859095480917458059034;

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

لذا ، كيف نمنع حدوث ذلك؟ هذا هو المكان الذي توجد به مساحات الأسماء الخاصة .

مساحات الأسماء الخاصة

تسمح مساحات الأسماء الخاصة للمطورين بوضع التعليمات البرمجية الخاصة بهم في أقسام (أو مساحات الأسماء ). تعمل هذه الأقسام بشكل مستقل عن بعضها البعض ولكن لا يزال بإمكانها القراءة والكتابة من مساحة الاسم العامة .

لكسر هذا الأمر بعبارات أبسط من سيناريو واقعي ، لنفترض أنك تعمل في مبنى مكتبي. لديك مكتب خاص بك ، وترى الآخرين مع مكاتبهم الخاصة. يتم إغلاق كل مكتب ، ولا يملك سوى الشخص الذي يملك المكتب مفتاحًا لهذا المكتب. لنفترض أيضًا أن لديك نوعًا من القفل الفائق الجديد الذي يجعل مكتبك غير قابل للاختراق من قِبل أي شخص آخر في المبنى. لنأخذ بعين الاعتبار مبنى المكتب نفسه كمساحة اسمية عالمية وكل مكتب كمساحة خاصة . ليس لديك حق الوصول إلى مكتب أي شخص آخر ولا يستطيعون الوصول إلى مكتبك. ولكن ، كل واحد منكم لديه إمكانية الوصول إلى بقية مبنى المكاتب ، سواء كان ذلك في الحصول على القهوة ، أو تناول وجبة خفيفة ، وما إلى ذلك. يستطيع كل واحد منكم انتزاع شيء من مساحة الاسم العالمية (أو إنشاء / تعديل شيء ما هناك) ، ولكن يمكنك إنشاء / تعديل / الاستيلاء على أي شيء من مكاتب بعضها البعض ؛ يمكنك فقط إنشاء / تعديل / انتزاع من مساحة الاسم / المكتب الخاص بك.

تحقيق مساحة الاسم الخاصة

إذن ، كيف نحقق مساحة الاسم الخاصة هذه في JavaScript؟ استخدام وظيفة ذاتية المجهول! إذا لم تقرأ المقالة من قبل نوح ستوكس ، أو المهام المجهولة ذاتياً التي تنفذ من تلقاء نفسه أو كيف تكتب جافاسكريبت نظيفة ، فالرجاء القيام بذلك الآن. هذه المادة سوف تذهب في التفاصيل حول وظائف ذاتية المجهول.

لنلقِ نظرة على استخدام متغير النقاط هذا من قبل ، ولكن دعنا نفصله إلى مساحة اسمية خاصة :

`//The most common way you'll see an anonymous self-executing function (function () { var points = 0; })();

//This is just one of many more alternative ways to use an anonymous self-executing function /* !function () { var points = 0; }(); */ `

الآن ، عندما يصل المستخدم إلى الصفحة ، لن يتمكن من فتح وحدة التحكم في المتصفح وتغيير قيمة متغير النقاط كما يحلو لهم! رائع!

مساحة الاسم وتفاعل المستند

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

لا يزال أي رمز داخل مساحة الاسم له نفس الوصول إلى مستند HTML ، و CSS ، كما تفعل عادة في مساحة الاسم العامة . إلقاء نظرة على نماذج التعليمات البرمجية جهازي التالية. كلاهما يؤديان نفس الوظيفة ، وليس أي منهما أكثر فائدة ، أو أكثر كفاءة ، من الآخر.

<script type="text/javascript"> (function () { document.querySelector('body').style.background = 'blue'; })(); </script>

بالضبط مثل:

<script type="text/javascript"> document.querySelector('body').style.background = 'blue'; </script>

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