¿Cuál es la función de devolución de llamada? Realmente no sé cómo usar y funcionar la función de devolución de llamada JS antes de aprenderla. En el siguiente artículo, les presentaré a los estudiantes el ejemplo de mi función de devolución de llamada de aprendizaje. Los estudiantes que necesitan saber no deben tener cuidado de no ingresar a la referencia.
Principio de función de devolución de llamada:
Me iré ahora y te lo notificaré ".
Este es un proceso asincrónico. Durante el proceso de "Voy a" (ejecución de funciones), "usted" puede hacer cualquier cosa ", llega" (se completa la ejecución de la función) y "notificarle" (devolución de llamada) después del proceso de "notificarle" (devolución de llamada) se lleva a cabo
ejemplo
1. Métodos básicos
<script language = "javascript" type = "text/javascript"> function dosomThing (callback) {// ... // llame a llameBackCallback ('Stuff', 'goes', 'aquí');} función foo (a, b, c) {// soy el callbackAlert (a + " + b +" " + c);} Dosometting (foo); </script>O usar la función anónima
<script language = "javascript" type = "text/javaScript"> function dosomething (damsg, callback) {alert (damsg); if (typeof llamado == "function") llamado (); } dosomething ("Función de devolución de llamada", function () {alert ("Igual que el formulario JQuery Callbacks!");}); </script>2. Métodos avanzados
Método de llamadas usando JavaScript
<script language = "javascript" type = "text/javaScript"> function tear (name) {this.name = name;} Thing.prototype.dosomthing = function (callback) {// llama a nuestra devolución de llamada, pero usando nuestra propia instancia como el contextcallback.call (this);} function foo () {this.name);} var t = new T = new T = new T = new T = new T = new T = new T = new T = NewBack. Cosa ('Joe'); t.dosomtthing (foo); // Alertas "Joe" a través de `foo` </script>Pasar parámetros
<script language = "javascript" type = "text/javaScript"> function tear (name) {this.name = name;} Thing.prototype.dosomthing = function (callback, salutation) {// llamar a nuestra devolución de llamada, pero utilizando nuestra propia instancia como contextcallback.call (this, salutation);} function (salutation) {alerta (alerta (alerta (alerta (alerta (alerta (alerta (alerta (alerta la + "") " var t = nueva cosa ('Joe'); t.Dosomething (foo, 'Hi'); // Alertas "Hola Joe" a través de `foo` </script>Pase los parámetros usando JavaScript
<script language = "javascript" type = "text/javaScript"> function tear (name) {this.name = name;} Thing.prototype.dosomthing = function (callback) {// llama a nuestra devolución de llamada, pero usando nuestra propia instancia como el contextcallback.apply (this, ['hola', 3, 2, 1, 1]);} Function Foo (salutation, tres, dos, alerta (alertation (one, ['Hola', 3, 2, 1, 1]);} " + this.name +" " + tres +" " + two +" " + one);} var t = new Thing ('Joe'); T.Dosomething (foo); // Alertas "Hola Joe 3 2 1" a través de `foo` </script>ejemplo
// Si la fuente de datos proporcionada es un entero, que es la puntuación de un estudiante, cuando num <= 0, es procesada por la capa subyacente, y cuando n> 0, la capa superior la procesa.
// Copiar la siguiente función y guárdela en 1.js
función f (num, devolución de llamada) {if (num <0) {alert ("¡Llame a la función de bajo nivel para procesar!"); alerta ("La puntuación no puede ser negativa, error de entrada!"); } else if (num == 0) {alerta ("¡Llame a la función de bajo nivel para procesar!"); alerta ("¡El estudiante puede no haber tomado el examen!"); } else {alerta ("Llame a la función de alto nivel para procesar!"); llamar de vuelta(); }}// Guardar el siguiente archivo test.html en el mismo directorio que 1.js:
<! DocType html public "-// w3c // dtd html 4.01 Transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <Head> <meta http-equiv = "content-type" content = "text/html; Charset = GB2312 "> <script src =" 1.js "type =" text/javascript "> </secret> <title> un documento titulado </title> <script type =" text/javaScript "> function test () {var p = document.getElementByid (" pp "); pp.inntext = ""; var num = document.getElementById ("puntaje"). valor; f (num, function () {// función de procesamiento de alto nivel anónimo if (num <60) alerta ("fallido!"); else if (num <= 90) alerta ("¡Excelente resultado!"); de lo contrario alerta ("¡Excelente resultado!");}) pp.inntext = "Por desde el1978 QQ5558064!" } </script> </head> <body> <p> Ejemplo de función de devolución de llamada: Cuando el estudiante obtiene <= 0 puntos, la capa inferior lo manejará; Cuando el puntaje> 0, la capa superior la manejará. </p> Por favor ingrese los puntajes del estudiante <input type = "text" id = "score"> <input type = "button" onClick = "test ()" valor = "verifique los resultados"> <p id = "pp"> </p> </body> </html>Las siguientes son las adiciones de otros internautas:
Modo de devolución de llamada en JavaScript:
Como se muestra en:
function writeCode (callback) {// ejecutar algunas cosas, callback (); // ...} function intrDucBugs () {//....Introduce Vulnerabilidad} WriteCode (intrDucBugs);Pasamos la aplicación de la función a WriteCode (), de modo que WriteCode la ejecute en el momento apropiado (regrese para llamarla más tarde)
Primero veamos un ejemplo no tan bueno (se refactorará más tarde):
// Simule los nodos DOM en la página de búsqueda y devuelve los nodos encontrados en la matriz de manera uniforme // Esta función solo se usa para no encontrar procesamiento lógico para los nodos DOM var findNodes = function () {var i = 100000; // una gran cantidad de bucles, var nodos = []; // usa para almacenar los nodos de domingo encontrados encontrados encontrados; while (i) {i -= 1; nodos.push (encontrado); } nodos de retorno; } // ocultar todos los nodos DOM encontrados var hide = function (nodos) {var i = 0, max = nodo.length; para (; i <max; i ++) {// Hay soportes después de encontrarnodes para indicar la ejecución de inmediato. Primero ejecute FindNodes () y luego ejecute Hide () <Hide (FindNodes ()); ejecución de la función}; nodos [i] .style.display = "Ninguno"} El método anterior es ineficiente. Se cree que Hide () debe atravesar los nodos de matriz devueltos por FindNodes () nuevamente. Cómo evitar tales bucles innecesarios. No podemos ocultar directamente el nodo de consulta en FindNodes (esta búsqueda puede modificar el acoplamiento lógico), por lo que ya no es una función general. La solución es usar el modo de devolución de llamada, donde puede pasar la lógica oculta del nodo a findNodes () en una función de devolución de llamada y delegarlo para ejecutar // Refactor FindNodes para aceptar una función de devolución de llamada var FindNodes = fucntion (devolución de llamada) {var i = 100000, nodos = [], encontrado; // Compruebe si la función de devolución de llamada está disponible para devolución de llamada if (typeof Callback! == 'function') {llamado = falso; } while (i) {i -= 1; if (llamado) {devolución de llamada (encontrado); } nodo.push (encontrado); } nodos de retorno; } // Función de verificación var hide = function (nodo) {node.style.display = 'none'; } // Encuentre el nodo posterior y escúchelo en la ejecución posterior FindNodes (ocultar); // Ejecutar FindNodes primero y luego esconderse. Por supuesto, la función de devolución de llamada también se puede crear al llamar a la función principal: findNodes (function (nodo) {node.style.display = 'none';});