الخبراء يأخذون الالتفاف! هذا لا علاقة له بالإغلاق نفسه ، ولا أعرف كيفية الحصول على العنوان ، لذلك جمعت الرقم للتو. آمل أن أسامحني!
اليوم ، أعطاني صديق تعلم للتو قطعة من الكود وسألني عن سبب عدم تنفيذ الطريقة. الرمز كما يلي:
نسخة الكود كما يلي:
وظيفة makefunc (x) {
وظيفة الإرجاع () {
إرجاع x ؛
}
}
تنبيه (makefunc (0)) ؛
في الواقع ، ليس الأمر كذلك أنه لا يتم تنفيذه ، ولكن الصديق يعني أن التنبيه يجب أن يكون "0" ، وليس الدالة () {return x ؛}.
ليس الأمر أن البرنامج النصي مكتوب بشكل خاطئ ، بل إنه لا يفهم العائد ، ويخرج من الوظيفة الحالية ، ويعيد قيمة من هذه الوظيفة. إذا كانت الوظيفة التي تم إرجاعها هي وظيفة ، فإن الوظيفة التي تم إرجاعها نفسها هي الوظيفة نفسها أيضًا.
يمكنك تعديل الكود أعلاه مثل هذا ، وهو تنبيه (Makefunc (0) ()):
نسخة الكود كما يلي:
وظيفة makefunc (x) {
إرجاع (وظيفة () {
إرجاع x ؛
}) () ؛
}
التنبيه (makefunc (0) ()) ؛
إذا كنت ترغب في إرجاع نتيجة تنفيذ الوظيفة ، فيجب عليك أولاً ترك الوظيفة تنفذ ، على سبيل المثال:
نسخة الكود كما يلي:
وظيفة makefunc (x) {
إرجاع (وظيفة () {
إرجاع x ؛
}) () ؛
}
تنبيه (makefunc (0)) ؛
هنا وظيفة مجهولة.
نسخة الكود كما يلي:
(وظيفة (){
إرجاع x ؛
}) () ؛
داخل القوس الأول ، توجد وظيفة مجهولة المصدر ، يتم استخدام القوس الثاني للاتصال بالوظيفة المجهولة ، ويمكنك تمريرها في المعلمات المطلوبة في القوس الثاني. على سبيل المثال:
نسخة الكود كما يلي:
(وظيفة (x ، y) {
تنبيه (x + y) ؛
})(ثلاثة وعشرين )؛