البرمجة

كيفية استخدام الإغلاقات في جافا سكريبت

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

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

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

javascript
.filter('asRelapsedTime', function(ConfigService) { var DECIMAL_STYLE = ','; return function(value, decimalPlaces) { let decimalizedNumber; if (decimalPlaces) { decimalizedNumber = value.toFixed(decimalPlaces | 0); } else { decimalizedNumber = value.toString(); } decimalizedNumber = decimalizedNumber.replace('.', DECIMAL_STYLE); return decimalizedNumber; }; });

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

المزيد من المعلومات

في جافا سكريبت، الإغلاقات (closures) تُستخدم للسماح للدوال الداخلية بالوصول إلى المتغيرات في نطاق الدالة الخارجية حتى بعد انتهاء تنفيذ الدالة الخارجية. هذا يعني أنه يمكن للدوال الداخلية استخدام وتعديل المتغيرات في النطاق الخارجي حتى بعدما يكون قد تم استدعاء الدالة الخارجية.

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

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

باستخدام الإغلاقات، يمكنك كتابة الكود بشكل أنيق ومنظم، حيث يمكنك تجنب تعريف العديد من المتغيرات في النطاق العام (global scope) وتجنب تكرار نفس الكود في كل مكان يحتاج إليه.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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