最近做的一个项目中用到了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.οnlοad=function(){getSinersReuest();
}

转载于:https://www.cnblogs.com/leinov/p/4045426.html

javascript callback函数的理解与使用相关推荐

  1. javascript匿名函数的理解

    复制粘贴 [color=red]点评:请记住,关键点是理解javascript的函数概念(参考w3cshool对函数的描述,搜索关键字:ECMAScript 函数).以及()的运算的理解. 比如:va ...

  2. javascript 匿名函数的理解

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他 ...

  3. 对JAVASCRIPT匿名函数的理解

    网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点 Query片段: view plaincopy to clipboardprint? (function(){ //这里忽略jQu ...

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

    Query片段: view plain copy to clipboard print ? (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我 ...

  5. JavaScript闭包函数的理解与使用

    要理解闭包,首先理解javascript特殊的变量作用域,变量的作用域无非就是两种: 全局变量 局部变量 javascript语言的特殊处就是函数内部可以读取全局变量. 1.如何从外部读取局部变量 我 ...

  6. JavaScript组合函数的理解

    组合(Compose)函数是在JavaScript开发过程中一种对函数的使用技巧.模式: 1.比如我们现在需要对某一个函数进行函数的调用,执行两个函数fn1和fn2,这两个函数是依次执行的: 2.那么 ...

  7. 理解javascript 回调函数

    理解javascript 回调函数 原文:理解javascript 回调函数 ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一 ...

  8. callback 函数的用法

    callback函数会在当前动画100%完成之后才会执行 jQuery Callback函数的用法: $(selector).hide(speed,callback); speed 或 duratio ...

  9. javascript~callback回调函数

    函数是对象,所以它可以作为一个参数传递给其他函数. 回调函数作为一个参数传递给其他函数时是没有括号的,只有函数名:使用括号表示立即执行回调函数callback.我们只希望传递一个函数的引用,让其他函数 ...

最新文章

  1. postgresql GUC 参数
  2. android phone驱动_[基础知识] 将 OneDrive 同步到 SD 卡等外部驱动器
  3. php 跨区域,PHP跨时区的功能实现
  4. python神经网络库 keras_在Python和R中使用Keras和Tensorflow进行深度学习
  5. 针对数据科学家和数据工程师的4条SQL技巧
  6. 用STATSVN统计公司SVN代码修改
  7. java洗牌_java语言实现简单的洗牌,发牌
  8. 5G(5)---7个方面读懂5G标准
  9. Android编程之ActivityManager: Segmentation fault
  10. python按哪个键删除_Python-从字典中删除键的方法
  11. 微云笔记控制脚本实例:远程控制脚本开关
  12. 整整1600套Axure原型图设计源文件UI UX交互设计案例
  13. ABAQUS使用功能总结
  14. 中国男性最想娶回家的金庸女性角色排行榜zz
  15. oracle建表类型,oracle 建表类型以及约束
  16. CHK文件恢复工具v2.0绿色版
  17. 简单3小步,轻松搞定PS证件照换底色(有手就行)
  18. 服务器无法通过系统,Day 10246 服务器无法通过系统非页面共享区来进行分配,因为服务器已达非页面共享分配的配置极限...
  19. git did not exit cleanly
  20. 城市代码(weather.com)[转]

热门文章

  1. cygwin个性化配置
  2. Spring Boot + Mybatis + Shiro 后台权限管理系统
  3. 为Spring Cloud Config Server配置远程git仓库
  4. CentOS7编译安装MySQL5.7之后安装mysql-devel出错解决方案
  5. oracle11g程序调优纪实
  6. 为WordPress添加favicon图标
  7. 邮件服务器 Postfix+ Cyrus-SASL+cyrus-IMAPD+日常维护
  8. ML近三年在CVPR比较流行被应用的技术有哪些?
  9. Mysql 安全登陆工具 mysql_config_editor
  10. 第 5 章 Stream