في الآونة الأخيرة ، أنا أنظر إلى Express ، وقد رأيته في كل مكان ، باستخدام وظائف رد الاتصال كمعلمات. إذا كان لا يمكن فهم هذا المفهوم ، فستكون مدونة NodeJs و Express مرتبكة للغاية. على سبيل المثال:
نسخة الكود كما يلي:
app.use (function (req ، res ، next) {
var err = خطأ جديد ('لم يتم العثور عليه') ؛
err.Status = 404 ؛
التالي (err) ؛
}) ؛
التطبيق هو كائن ، والاستخدام هو طريقة ، ومعلمة الطريقة هي وظيفة مجهولة مع المعلمات ، ويتم إعطاء جسم الوظيفة مباشرة لاحقًا. كيف تفهم هذا الرمز؟ دعونا أولاً نفهم مفهوم وظائف رد الاتصال.
بادئ ذي بدء ، نحتاج إلى أن نفهم أنه في JS ، تكون الوظائف هي أيضًا كائنات ، والتي يمكن تعيينها للمتغيرات ويمكن وضعها كمعلمات في قائمة معلمات الوظيفة. على سبيل المثال:
نسخة الكود كما يلي:
var dosomething = function (a ، b)
{
إرجاع A + B ؛
}
هذا الرمز يعني تحديد وظيفة مجهولة. باستثناء عدم وجود اسم ، لا تختلف هذه الوظيفة المجهولة عن وظيفة عادية. ثم قم بتعيين الدالة المجهولة إلى شيء متغير. التالي ندعو:
نسخة الكود كما يلي:
console.log (dosomething (2،3)) ؛
هذا مخرجات 5.
يتم وضع وظيفة رد الاتصال في قائمة المعلمات لوظيفة أخرى (مثل الوالد) ، وتم نقلها إلى الوالد كمعلمة ، ثم تنفذها في موضع معين في هيئة دالة الأصل. لوضعه في التجريد ، انظر إلى المثال:
نسخة الكود كما يلي:
// لتوضيح مفهوم رد الاتصال
var doit = وظيفة (رد الاتصال)
{
var a = 1 ،
ب = 2 ،
ج = 3 ؛
var t = رد الاتصال (a ، b ، c) ؛
إرجاع T + 10 ؛
} ؛
var d = doit (function (x ، y ، z) {
العودة (x+y+z) ؛
}) ؛
console.log (d) ؛
حدد أولاً وظيفة DOIT ، وهناك رد اتصال معلمة. هذا الاتصال هو وظيفة رد الاتصال ، ويمكن أخذ الاسم بشكل تعسفي. بالنظر إلى جسم الوظيفة ، حدد أولاً ثلاثة متغيرات A و B و C. ثم اتصل بوظيفة رد الاتصال. أخيرًا ، يتم إرجاع القيمة.
فيما يلي وظيفة doit. تجدر الإشارة إلى أنه عندما حددت DOIT الآن ، لم يتم تعريف رد الاتصال ، لذلك لم تكن تعرف ما هو رد الاتصال. هذا سهل الفهم في الواقع. عندما نحدد وظيفة ما ، تعطي المعلمات اسمًا فقط ، مثل A ، باستخدام A في جسم الوظيفة ، لكن العملية برمتها لا تعرف ما هي A. فقط عندما يتم استدعاء الوظيفة يتم تحديدها ، مثل 2. النظر إلى الوراء ، عند استدعاء doit ، نحتاج إلى تحديد ماهية رد الاتصال. كما ترون ، تكمل هذه الوظيفة وظيفة مجموع.
عملية تنفيذ الكود أعلاه هي:
استدعاء وظيفة doit ، المعلمة هي وظيفة مجهولة. أدخل جسم وظيفة doIT ، أولاً ، حدد A ، B ، C ، ثم قم بتنفيذ الوظيفة المجهولة الآن ، والمعلمات هي A و B و C و Retring a t ، وأخيراً إرجاع T+10 إلى D.
العودة إلى المثال الأصلي ، app.use (...) هو استدعاء وظيفة. يمكننا أن نتخيل أنه يجب تحديد طريقة الاستخدام من قبل ، ولكن لم يتم تقديمها هنا. بمقارنة هذين المثالين ، يمكنك فهمهما على الفور.
عند استخدام Nodejs و Express ، من المستحيل علينا العثور على تعريف الوظيفة لكل طريقة أو وظيفة لإلقاء نظرة. لذلك فقط تعرف على المعلمات التي يتم تمريرها إلى رد الاتصال في هذا التعريف. ثم عند استدعاء طريقة أو وظيفة ، نحدد وظائف مجهولة في المعلمات لإكمال وظائف معينة.
زيادة!