سؤال

انا سألت سؤال حول الاسترجاعات ووصلت إلى سؤال آخر (انظر التعليق).كيف يختلف الإغلاق عن رد الاتصال؟

هل كانت مفيدة؟

المحلول

وتحقق من مقدمة في هذا: http://jibbering.com/faq/faq_notes/closures. أتش تي أم أل . يمكن أن تساعدك على فهم أفضل كيفية ارتباط الإغلاق إلى وظائف.

وهنا هو عبارة عن مجموعة من الأمثلة الإغلاق: http://www.javascriptkit.com/javatutors/ closures2.shtml

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

نصائح أخرى

وتعريفات مختلفة:

استدعاء -

<اقتباس فقرة>   

والاستدعاء هو قانون قابل للتنفيذ التي يتم تمريرها كحجة لرمز آخر.

إغلاق -

<اقتباس فقرة>   

وإغلاق هو دالة التي يتم تقييمها في بيئة تحتوي على واحد أو أكثر المربوطة المتغيرات. عندما دعا، يمكن الدالة الوصول إلى هذه المتغيرات.

هناك تعريف جيد للإغلاقات هنا:

"الإغلاق" هو ​​تعبير (عادةً وظيفة) يمكن أن يكون لها متغيرات حرة مع بيئة تربط تلك المتغيرات (التي "تغلق" التعبير).

من الناحية العملية، هذا يعني أنها دالة تحتوي على بعض المتغيرات المخفية.

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

في كلمات بسيطة: رد اتصال باستخدام متغيرات السياق هو إغلاق

وهناك رد تبعا لمتغير سياق المتغيرات ملزمة الملقب (== الدولة الكائن) سيكون الإغلاق. وسوف تكون وظيفة نقية، وإلا، عندما يستغرق سوى متغيرات مجانية (== المعلمات).

وهنا هو وسيلة للتمييز بين هذين:

وإغلاق

<اقتباس فقرة>   

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

واستدعاء

<اقتباس فقرة>   

وA الاستدعاء هو أكثر أو أقل على غرار الإغلاق، لكنه أكثر استخداما للإعلام وتوفير قدرات متزامن. على سبيل المثال إذا قمت بإجراء المكالمات مسج اياكس، سيكون لديك الاسترجاعات مثل success()، error()، beforeSend() وهكذا دواليك لمعالجة البيانات غير المتزامنة.

ما هي وظيفة رد الاتصال؟

وظيفة رد الاتصال هي وظيفة:

  • تم تمريرها كوسيطة إلى وظيفة أخرى
  • يتم استدعاؤه (LAGO) بعد نوع ما من الأحداث
  • بمجرد اكتمال الوظيفة الأصلية، يتم استدعاء الوظيفة التي تم تمريرها كوسيطة

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

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

ومن الشائع أيضًا قول "استدعاء وظيفة" أو "بدء وظيفة" أو "تنفيذ وظيفة".

 function getUserInput(firstName, lastName, age, callback2,callback1) {
    var fullName = firstName + " " + lastName;

    // Make sure the callback is a function
    if (typeof callback2 === "function") {
    // Execute the callback function and pass the parameters to it
    callback2(fullName, age);
    }
	
    if (typeof callback1 === "function") {     
    callback1(lastName);
    }
}

function callbackforlastname1(lname){
 console.log("---");
}
 
function genericPoemMaker(name, aged) {
    console.log(name + " is finer than fine wine.");
     console.log("A " + aged + " of unfortunl smile");
}

getUserInput("Avinash", "Maurya", "26", genericPoemMaker,callbackforlastname1); 
ऐसे कॉल करते है

إنهاء :

  • كلمة أساسية وظيفية داخل وظيفة أخرى، أنت تقوم بإنشاء إغلاق

  • أو تعود دالة إلى دالة أخرى يمكننا أن نقول إغلاقها

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

var length = 101;
function fn2() {
	console.log("fffxxx: "+this.length);
}
 
var obj = {
  length: 5,
  method3: function(fn) {
    fn();
    arguments[0]();
  }
};
 
obj.method3(fn2, 1);
   
**الإخراج

fffxxx:101
fffxxx:2**

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top