ما هي وظيفة رد الاتصال؟ لا أعرف حقًا كيفية استخدام وظيفة رد الاتصال JS وتعمل قبل تعلمها. في المقالة التالية ، سأقدم لكم الطلاب مثال وظيفة رد الاتصال على التعلم. يجب ألا يحرص الطلاب الذين يحتاجون إلى معرف على عدم إدخال المرجع.
مبدأ وظيفة رد الاتصال:
سأغادر الآن وسأعلمك ".
هذه عملية غير متزامنة. أثناء عملية "أنا ذاهب إلى" (تنفيذ الوظيفة) ، "يمكنك" أن تفعل أي شيء ، "تصل" (تم الانتهاء من تنفيذ الوظيفة) و "إخطارك" (رد الاتصال) بعد عملية "إخطارك" (رد الاتصال)
مثال
1. الأساليب الأساسية
<script language = "javaScript" type = "text/javaScript"> function dosomething (callback) {// .../ call callbackcallback ('agest' ، 'goes' ، 'هنا') ؛} foot foo (a ، b ، c) {i ke the callbackalert (a + " +" " +" </script>أو استخدم وظيفة مجهولة
<script language = "javaScript" type = "text/javaScript"> function dosomething (damsg ، callback) {Alert (damsg) ؛ if (typeof callback == "function") callback () ؛ } dosomething ("وظيفة رد الاتصال" ، الدالة () {Alert ("نفس نموذج عوائق jQuery!") ؛}) ؛ </script>2. الأساليب المتقدمة
طريقة الاتصال باستخدام JavaScript
<script language = "javaScript" type = "text/javaScript"> thing (name) {this.name = name ؛ الشيء ('جو') ؛ t.dosomething (foo) ؛ // التنبيهات "Joe" عبر `foo` </script>تمرير المعلمات
<script language = "javaScript" type = "text/javaScript"> thing (name) {this.name = name ؛ t = شيء جديد ('Joe') ؛ t.dosomething (foo ، 'hi') ؛ // تنبيهات "مرحبًا جو" عبر `foo` </script>تمرير المعلمات باستخدام JavaScript
<script language = "javaScript" type = "text/javaScript"> thing (name) {this.name = name ؛ "" + this.name + "" + three + "" + two + "" + one) ؛} var t = new thing ('Joe') ؛ t.dosomething (foo) ؛ // التنبيهات "Hi Joe 3 2 1" عبر `foo` </script>مثال
// إذا كان مصدر البيانات المقدم هو عدد صحيح ، وهو درجة الطالب ، عندما تتم معالجتها بواسطة الطبقة الأساسية ، وعندما يتم معالجتها بواسطة الطبقة العليا.
// انسخ الوظيفة التالية وحفظها إلى 1.JS
الدالة f (num ، callback) {if (num <0) {Alert ("استدعاء الدالة ذات المستوى المنخفض للمعالجة!") ؛ تنبيه ("لا يمكن أن تكون النتيجة سلبية ، خطأ في الإدخال!") ؛ } آخر إذا (num == 0) {Alert ("استدعاء وظيفة المستوى المنخفض للمعالجة!") ؛ تنبيه ("قد لا يكون الطالب قد أجرى الامتحان!") ؛ } آخر {Alert ("استدعاء الوظيفة عالية المستوى للمعالجة!") ؛ أتصل مرة أخرى()؛ }}// احفظ ملف test.html التالي في نفس الدليل مثل 1.JS:
<! doctype html public "-// w3c // dtd html 4.01 Transitional // en" "http://www.w3 charset = gb2312 "> <script src =" 1.js "type =" text/javaScript "> </script> <title> unded document </title> <script type =" text/javaScript "> test test () {var p = document.getElementByid (" pp ") ؛ pp.innertext = "" ؛ var num = document.getElementById ("Score"). value ؛ f (num ، function () {// وظيفة معالجة عالية المستوى مجهولة إذا (num <60) تنبيه ("فشل!") ؛ آخر إذا (num <= 90) تنبيه ("نتيجة ممتازة!") ؛ تنبيه آخر ("نتيجة ممتازة!") } </script> </head> <body> <p> وظيفة رد الاتصال مثال: عندما يسجل الطالب <= 0 نقطة ، ستتعامل الطبقة السفلية معها ؛ عندما النتيجة> 0 ، ستعالجها الطبقة العليا. </p> الرجاء إدخال درجات الطالب <input type = "text" id = "score"فيما يلي الإضافات من مستخدمي الإنترنت الآخرين:
وضع رد الاتصال في JavaScript:
كما هو موضح في:
دالة WriteCode (Callback) {// تنفيذ بعض الأشياء ، رد الاتصال () ؛ // ...} function intrduceBugs () {//..introduce prevability} writeCode (intrduceBugs) ؛نمرر تطبيق الوظيفة على WriteCode () ، بحيث يقوم WriteCode بتنفيذها في الوقت المناسب (العودة للاتصال بها لاحقًا)
دعونا أولاً نلقي نظرة على مثال غير جيد (سيتم إعادة تمهيده لاحقًا):
) بينما (i) {i -= 1 ؛ العقد. push (وجدت) ؛ } إرجاع العقد ؛ } // إخفاء جميع عقد DOM الموجودة var hide = function (noles) {var i = 0 ، max = nodes.length ؛ لـ (؛ i <max ؛ i ++) {// هناك أقواس بعد العثور على nodes للإشارة إلى التنفيذ على الفور. أولاً تنفيذ findNodes () ثم تنفيذ Hide () <Hide (findNodes ()) ؛ تنفيذ وظيفة} ؛ العقد [i] .style.display = "none"} الطريقة أعلاه غير فعالة. من المعتقد أن Hide () يجب أن يعبر العقد المصفوفة التي يتم إرجاعها بواسطة FindNodes () مرة أخرى. كيفية تجنب مثل هذه الحلقات غير الضرورية. لا يمكننا إخفاء عقدة الاستعلام مباشرة في FindNodes (يمكن لهذا البحث تعديل الاقتران المنطقي) ، لذلك لم يعد وظيفة عامة. يتمثل الحل في استخدام وضع رد الاتصال ، حيث يمكنك تمرير المنطق المخفي للعقدة إلى FindNodes () في وظيفة رد الاتصال وتفويضه لتنفيذ // refactor findnodes لقبول وظيفة رد الاتصال vennodes = fucntion (رد الاتصال) {var i = 100000 ، nodes = [] ، تم العثور عليها ؛ // تحقق مما إذا كانت وظيفة رد الاتصال متاحة للاستدعاء إذا (typeof callback! == 'function') {callback = false ؛ } بينما (i) {i -= 1 ؛ إذا (رد الاتصال) {callback (found) ؛ } العقد. push (وجدت) ؛ } إرجاع العقد ؛ } // checkback function var hide = function (node) {node.style.display = 'none' ؛ } // ابحث عن العقدة اللاحقة وأخفها في التنفيذ اللاحق FindNodes (Hide) ؛ // تنفيذ FindNodes أولاً ثم إخفاء. بالطبع ، يمكن أيضًا إنشاء وظيفة رد الاتصال عند استدعاء الوظيفة الرئيسية: FindNodes (function (node) {node.style.display = 'none' ؛}) ؛