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();
}
javascript callback函数的理解与使用的更多相关文章
- javascript 匿名函数的理解(转)
原网址 http://www.jb51.net/article/21948.htm javascript 匿名函数的理解(透彻版) 代码如下: (function(){ //这里忽略jQuery所有实 ...
- javascript 匿名函数的理解,js括号中括function 如(function(){})
代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也 ...
- 【repost】对JAVASCRIPT匿名函数的理解(透彻版)
Query片段: view plaincopy to clipboardprint? (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其 ...
- 对JAVASCRIPT匿名函数的理解
网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点 Query片段: (function(){ //这里忽略jQuery所有实现 })(); 要说匿名函数,我们首先要由函数本身说起. ...
- JavaScript回调函数的理解
这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> < ...
- 玩转JavaScript Callback函数
如果你对Jquery没有足够的经验,但是你又用过JQuery,这么来说没你已经用过了回调函数了.但是你可能不知道它是如何工作和实现的. 这篇文章主要基于我所了解的回调函数,我试图启发大家基于最常规的J ...
- JavaScript闭包函数的理解
闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...
- JavaScript callback function 回调函数的理解
来源于:http://mao.li/javascript/javascript-callback-function/ 看到segmentfault上的这个问题 JavaScript 回调函数怎么理解, ...
- JavaScript callback function 理解
看到segmentfault上的这个问题 JavaScript 回调函数怎么理解,觉得大家把异步和回调的概念混淆在一起了.做了回答: 我觉得大家有点把回调(callback)和异步(asynchron ...
随机推荐
- shell编程之数学运算
shell数学运算支持整数运算的四种方法 1.let命令 no1=4; no2=5; let result=no1+no2 2.[]操作符 result=$[ no1 + no2] 3.(())操作符 ...
- apple开发者账号申请
1. 登陆appleID. 2. 进入 Your Account 3. 在Account Summary 中的MemberShips中选择第一个(界面大概如下) 4.选择后进入下图. 5. yes ...
- protobuf的安装和使用
以下全部基于win7系统. protobuf是什么,有什么用网上说的已经很多了.这里就是说一下怎么使用.就当给自己做个笔记吧. .proto文件的语法什么的也请网上查看,挺多的. 第一步: 下载pro ...
- WinHex分析PE格式(2)&& 如何手动添加区段并运行区段
由于这次文章内容比较多 所以写成DOC文档 为了复习所学的知识,我在原本的软件里试者手动加入区段 ,并写给大家分享,还试试者用LordPE加区段发现竟然失败了, 还是自己动手比较实在,完美运行. 利用 ...
- HDU 2843 I Will Win(概率题?,怨念颇深,简单)
题目 真不想说什么,,,这神题真讨厌,,,多校的.. //又是一道神题... #include<stdio.h> #include<string.h> //最大公约数 int ...
- POJ 1325
#include<iostream> #include<stdio.h> #define MAXN 105 using namespace std; int _m[MAXN][ ...
- DB2 DATE类型在显示的时候,带有00:00:00,去掉的方法,使用VARCHAR()函数
DROP VIEW DMS.V_AQ_INSURANCECLAIMS; CREATE VIEW DMS.V_AQ_INSURANCECLAIMS AS SELECT * FROM (SELECT T1 ...
- spring_150803_component
实体类: package com.spring.model; public class DogPet { private int id; private String name; private in ...
- Java7编程 高级进阶学习笔记--嵌套类
定义: 在一个类中定义的类叫做嵌套类. 作用: 1.允许对相关类进行逻辑分组 2.增强了代码的封装性 3.使代码具有更强的可读性和维护性 使用方式: package com.cmz.baseTest; ...
- C和C++中结构体(struct)、联合体(union)、枚举(enum)的区别
C++对C语言的结构.联合.枚举 这3种数据类型进行了扩展. 1.C++定义的结构名.联合名.枚举名 都是 类型名,可以直接用于变量的声明或定义.即在C++中定义变量时不必在结构名.联合名.枚举名 前 ...