javascript callback函数的理解与使用

最近做的一个项目中用到了callback函数,于是就研究了下总结下我对javascript callback的理解 首先从callback的字面翻译“回调” 可以理解这是一个函数被调用的机制

当我们遇到一个名词首先可能是百度谷歌搜索看官方是怎么解释的
下面是维基百科对回调的定义:

a callback is a piece of executable code that is passed as an argument to other code which is expected to call back (execute) the argument at some convenient time
硬翻译:一个回调函数是作为另一个函数的参数的一个可执行的代码段 这个代码段在方便的时间来执行
通俗形象的解释:把函数f2当做一个参数传给函数f1 并且在f1里适当的时间执行f2(下面的所有例子我都用f1,f2表示)

所以我们可以得到一个这样的回调函数模式

function f1(f2) {

    //f1要执行的一些代码

    if (f2 && typeof(f2) === "function") { //对f2做判断是否存在并且是一个函数
        f2();
    }

}

这里要注意两点 参数里的f2是一个指向f2这个函数的指针所以f2后面不能加括号
而f1内部的f2后面要有括号 因为这时我们要调用执行f2 ,所以要写f2()

我们把这个模式实例化看下他的执行结果

声明函数

function f1(f2) {
    alert("我是f1");
    if (f2 && typeof(f2) === "function") { //写上判断是个好习惯
        f2()
    }
}

执行

f1(function() {
    alert("我是f2");
})

结果:
//"我是f1",“我是f2”

我们看下整个函数执行的过程 当调用 f1(function(){alert("我是f2");})的时候
首先把一个匿名函数传给了f1() 而这个匿名函数就是声明函数里的参数f2 javascript程序是从上到下执行 先执行了alert("我是f1"); 然后执行了f2();

那我们可不可以这样写呢

function f1(f2) {
    alert("我是f1");
    if (f2 && typeof(f2) === "function") {
        f2()
    }

    alert("我又是f1 哈哈");
}
执行
f1(function(){
    alert("我是f2");
})

//结果:我是f1 ,我是f2,我又是1 哈哈

再看对callback的定义 ,我们可以让callback在我们想要执行的时候执行,不影响f1本身的执行流

但为了封装和美观大多数我们会这样写

function f1(f2){

    if (f2 && typeof(f2) === "function") {
        settimeOut(function(){f2()},1000) ;//f1执行1s后f2执行
    }
}

function f2(){
    /**/
}

f1(f2);

  

我们平常会经常用到callback

比如jQuery里的一个例子

$("#div1").fadeOut("fast",functin(){
    $("#div2").fadeIn("slow");
})

让#div快速隐藏然后让#div2渐渐显示,在jQuery里有大量的callback函数

并且有一个专门的有一个方法callbacks来管理

jQuery.Callbacks = function( options ) {...}

最后说下我最在项目中用到的callback吧
hybrid app 功能大概就是 我向ios发送一个请求 ios返回给我的json数据 然后我将返回的数据解析插入到web页面上

//首先我写一个javascript和ios通信callback函数(简化)
getData(callback){
    settimeOut(function(){callback(iso_return)},100);
}

//然后我向ios发送一个请求
function getSinersReuest(){
    window.location.href="vvmusic://....callback=getSinersData"
}
/*然后ios截获url中的callback执行getData(getSinersData)返回给我数据;getSinersData是把ios返回的json插入到页面显示*/

getSinersData(iso_return){
    .........
}

//当页面加载的时候调用
window.onload=function(){
    getSinersReuest();
}
时间: 2024-10-08 16:19:46

javascript callback函数的理解与使用的相关文章

【repost】对JAVASCRIPT匿名函数的理解(透彻版)

Query片段: view plaincopy to clipboardprint? (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿 名函数又没看到运行(当然是运行了--),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN.结果相信现在很多人都很清楚了(因为在我之 后也不乏来者,呵呵~).当一个匿名函数被括起来,然后再在后面

JavaScript回调函数的理解

这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> </head> <script type="text/javascript"> function testfun(){ alert("hello"); } //i = testfun();//会执行 //i = testfun; // 将首地址给了i /

对javascript匿名函数的理解(透彻版)

不积跬步,无以至千里:不积小流,无以成江海.优秀的东西收集多了,自己也会变优秀的哦!!! http://www.cnblogs.com/chenxianbin89/archive/2010/01/28/1658392.html

重新理解javascript回调函数

把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于是他对A层人员说,我需要你们提供满足某种需求的数据,你给我提供一个接口. A层的人员说:我给你提供数据,怎么展示和处理则是B的事情. 当然B层不可能为你每个需求都提供一个数据接口,B给A提供一个通过的接口.B得到数据,然后B写函数去展示. 即,你需要和其他人合作,别人提供数据,而你不需要关注别人获取

理解javascript 回调函数

原文:理解javascript 回调函数 ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如

关于js的callback回调函数的理解

回调函数的处理逻辑理解: 所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面. 待回调函数被触发调用的时候,对应的回调函数的代码才会从管理器队列取出来并自动执行(激活回调函数的代码),实现异步的编程效果. 不过,对于一些必须要等回调函数执行完毕才可以确定的动作,实际上,就是会掉入一个层层回调的局面了.这点也是回调函数的复杂的地方! 换句话说,只要您要获取的值是要被回调才确定的,那接下来的所有代码都必须用回调的方式来编写

深入理解javascript 匿名函数和闭包

代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿 名函数又没看到运行(当然是运行了……),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN.结果相信现在很多人都很清楚了(因为在我之 后也不乏来者,呵呵~).当一个匿名函数被括起来,然后再在后面加

JavaScript强化教程——jQuery Callback 函数

本文为 H5EDU 机构官方 HTML5培训HTML5培训 教程,主要介绍:JavaScript强化教程 -- jQuery Callback 函数 Callback 函数在当前动画 100% 完成之后执行. jQuery 动画的问题许多 jQuery 函数涉及动画.这些函数也许会将 speed 或 duration 作为可选参数.例子:$("p").hide("slow")speed 或 duration 参数可以设置许多不同的值,比如 "slow&qu

JavaScript大杂烩2 - 理解JavaScript的函数

JavaScript中的字面量 书接上回,我们已经知道在JavaScript中存在轻量级的string,number,boolean与重量级的String,Number,Boolean,而且也知道了之间的区别.这里补充一点,直接使用字面量定义的变量都是属于前一种类型,例如: var name = 'Frank'; 此外大多数的内置操作返回的也都是前一种类型,这是必须的. function是第一等公民 与别的语言不同,在JavaScript中,函数是作为数据类型存在的,所以函数具有数据的静态行为.