回调函数详解

回调函就是一个函数调用另一个函数的过程,在编码过程中我们经常会遇到在上一个函数执行完后,才开始执行下一个函数。

下面是代码生成一个div然后让他的左边距增加到100然后停止。

function fun1(){
        var div =document.createElement(‘div‘);
        div.style.width = ‘100px‘;
        div.style.height = ‘100px‘;
        div.style.background =‘red‘;
        document.body.appendChild(div);
        var s = 0;
        var timer = null;
        timer = setInterval(function(){
            s ++;
            if(s==1000){
                clearInterval(timer);
            }
            div.style.marginLeft = s+‘px‘;
        },1);

    }

fun1();

  上面是我们经常会遇见的情况,当一个动态效果执行完后,我们会想接着再执行另一个事件,就需要把另一个函数当参数传递进去,当上一个函数执行完后,执行下一个函数。

代码如下。



  fun1(fun2);

    function fun1(callback) {
        var div = document.createElement(‘div‘);
        div.style.width = ‘100px‘;
        div.style.height = ‘100px‘;
        div.style.background = ‘red‘;
        document.body.appendChild(div);
        var s = 0;
        var timer = null;
        timer = setInterval(function () {
            s++;
            if (s == 1000) {
                clearInterval(timer);
                callback();
            }
            div.style.marginLeft = s + ‘px‘;
        }, 1);
    }

    function fun2() {
        var div1 = document.createElement(‘div‘);
        div1.style.width = ‘100px‘;
        div1.style.height = ‘100px‘;
        div1.style.background = ‘red‘;
        div1.style.marginTop = ‘100px‘;
        document.body.appendChild(div1);
        var s = 0;
        var timer = null;
        timer = setInterval(function () {
            s++;
            if (s == 1000) {
                clearInterval(timer);
            }
            div1.style.marginLeft = s + ‘px‘;
        }, 1);
    }


  上面代码中fun2在fun1执行是被作为一个参数传进了,fun1里面。当fun1里s等于1000是,定时器停止然后开始执行fun2。

  如果当fun2执行完后我们还需要回调,那么把另一个函数传入fun2就行了;

fun1(fun2);

    function fun1(callback) {
        var div = document.createElement(‘div‘);
        div.style.width = ‘100px‘;
        div.style.height = ‘100px‘;
        div.style.background = ‘red‘;
        document.body.appendChild(div);
        var s = 0;
        var timer = null;
        timer = setInterval(function () {
            s++;
            if (s == 1000) {
                clearInterval(timer);
                callback(fun3); //这里的callback()原型就是fun2,把fun3当做参数传进去,不要用fun3(),这样就是执行了; 
            }
            div.style.marginLeft = s + ‘px‘;
        }, 1);

    }
    function fun2(callback) {
        var div1 = document.createElement(‘div‘);
        div1.style.width = ‘100px‘;
        div1.style.height = ‘100px‘;
        div1.style.background = ‘red‘;
        div1.style.marginTop = ‘100px‘;
        document.body.appendChild(div1);
        var s = 0;
        var timer = null;
        timer = setInterval(function () {
            s++;
            if (s == 1000) {
                clearInterval(timer);
                callback();
            }
            div1.style.marginLeft = s + ‘px‘;
        }, 1);
    }

    function fun3() {
        var div1 = document.createElement(‘div‘);
        div1.style.width = ‘100px‘;
        div1.style.height = ‘100px‘;
        div1.style.background = ‘red‘;
        div1.style.marginTop = ‘100px‘;
        document.body.appendChild(div1);
        var s = 0;
        var timer = null;
        timer = setInterval(function () {
            s++;
            if (s == 1000) {
                clearInterval(timer);
            }
            div1.style.marginLeft = s + ‘px‘;
        }, 1)
    }
时间: 2024-10-12 04:33:04

回调函数详解的相关文章

Cocos2d-x3.1回调函数详解

Cocos2d-x3.1中回调函数的定义在CCRef.h中声明,源码如下: typedef void (Ref::*SEL_CallFunc)(); typedef void (Ref::*SEL_CallFuncN)(Node*); typedef void (Ref::*SEL_CallFuncND)(Node*, void*); typedef void (Ref::*SEL_CallFuncO)(Ref*); typedef void (Ref::*SEL_MenuHandler)(Re

Java回调函数详解

为了了解什么是回调函数,在网上查阅了如下资料,整理如下: 资料一: 首先说说什么叫回调函数? 在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调.在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃. 这样的解释似乎还是比较难懂,这里举个简 单的例子: 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程

Java(Android)回调函数详解

一.前言 本周有位入行开发不久的朋友问我回调究竟是个什么概念,在网上看了很多的回调函数解释,但是越看越乱.虽然回调函数这个梗已经不新鲜了,这里还是用书面的形式记录下. 如果有了解的,就无需再看. 二.概念 概念上,这里引用百度百科的解释,如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条

JS中的回调函数详解

function studyEnglish(who){ document.write(who+"学习英语</br>"); } function study(callback,params){ callback(params); } study(studyEnglish,'ck'); //或者 function study(callback,params){ callback(params); } study(function(who){ document.write(who

jQuery 源码解析(八) 异步队列模块 Callbacks 回调函数详解

异步队列用于实现异步任务和回调函数的解耦,为ajax模块.队列模块.ready事件提供基础功能,包含三个部分:Query.Callbacks(flags).jQuery.Deferred(funct)和jQuery.when().本节讲解Callbacks,也就是回调函数列表 回调函数用于管理一组回调函数,支持添加.移除.触发.锁定和禁用回调函数,为jQuery.ajax.jQuery.Deferred()和ready()事件提供基础功能,我们也可以基于它编写新的组件. 使用方法:$.Callb

[应用相关] C 语言回调函数详解

1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君.感觉这个让人更容易想到的是异步操作,而不是回调.另外还有两句英文让我印象深刻:1) If you call me, I will call you back; 2) Don't call me, I will

register_shutdown_function函数详解--脚本退出时执行回调函数

register_shutdown_function — Register a function for execution on shutdown. ps:Registers a callback to be executed after script execution finishes or exit() is called. 1.脚本时常死掉,而且并不总是那么好看.我们可不想给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下) . PHP中有一个叫

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult

可变参数函数详解

可变参数函数又称参数个数可变函数(本文也简称变参函数),即函数参数数目可变.原型声明格式为: type VarArgFunc(type FixedArg1, type FixedArg2, -); 其中,参数可分为两部分:数目确定的固定参数和数目可变的可选参数.函数至少需要一个固定参数,其声明与普通函数参数相同:可选参数由于数目不定(0个或以上),声明时用"-"表示("-"用作参数占位符).固定参数和可选参数共同构成可变参数函数的参数列表. 由于参数数目不定,使用可