函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回;

回调函数

一个函数被作为参数传递给另一个函数(在这里我们把另一个函数叫做“otherFunction”),回调函数在otherFunction中被调用。

注意到click方法中是一个函数而不是一个变量

//它就是回调函数

$("#btn_1").click(function() {

alert("Btn 1 Clicked");

});

//或者

function click() { // 它就是回调函数

alert("Btn 1 Clicked");

}

$("#btn_1").click(click);

回调函数是怎样运作的

因为函数在Javascript中是第一类对象,我们像对待对象一样对待函数,因此我们能像传递变量一样传递函数,在函数中返回函数,在其他函数中使用函数。当我们将一个回调函数作为参数传递给另一个函数是,我们仅仅传递了函数定义。我们并没有在参数中执行函数。我们并不传递像我们平时执行函数一样带有一对执行小括号()的函数。

需要注意的很重要的一点是回调函数并不会马上被执行。它会在包含它的函数内的某个特定时间点被“回调”(就像它的名字一样)

实现回调函数的基本原理

使用命名函数或者匿名函数作为回调

像之前的例子一样,第一种方法就是匿名函数作为回调(使用了参数位置定义的匿名函数作为回调函数)。第二种方式就是命名函数作为回调(定义一个命名函数并将函数名作为变量传递给函数)

传递参数给回调函数

//第一种方法:匿名函数作为回调函数

var generalLastName = "Cliton";

function getInput(options, callback){

var arr = [];

arr.push(options);

//将全局变量generalLastName传递给回调函数

callback(generalLastName,arr);

}

getInput({name:"Rich",speciality:"Javascript"}, function(generalLastName,arr){

console.log(generalLastName + ":" + arr[0].speciality) // Cliton:Javascript

});

//第二种方法:命名函数作为回调函数

var generalLastName = "Cliton";

function getInput(options, callback){

var arr = [];

arr.push(options);

//将全局变量generalLastName传递给回调函数

callback(generalLastName,arr);

}

function call(generalLastName,arr){

console.log(generalLastName + ":" + arr[0].speciality) // Cliton:Javascript

}

getInput({name:"Rich",speciality:"Javascript"}, call);

在执行之前确保回调函数是一个函数

function getInput(options, callback){

//确保callback是一个函数

if(typeof callback === "function"){

//调用它,既然我们已经确定了它是可调用的

callback(options);

}

}

回调地狱(回调十八层地狱)

var p_client = new Db('integration_tests_20', new Server("127.0.0.1", 27017, {}), {'pk':CustomPKFactory});

p_client.open(function(err, p_client) {

p_client.dropDatabase(function(err, done) {

p_client.createCollection('test_custom_key', function(err, collection) {

collection.insert({'a':1}, function(err, docs) {

collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}, function(err, cursor) {

cursor.toArray(function(err, items) {

test.assertEquals(1, items.length);

// Let's close the db

p_client.close();

});

});

});

});

});

});

解决方案:

1.给你的函数命名并传递它们的名字作为回调函数,而不是主函数的参数中定义匿名函数。

2.模块化L将你的代码分隔到模块中,这样你就可以到处一块代码来完成特定的工作。然后你可以在你的巨型应用中导入模块。

创建你自己的回调函数

//callback,参数的最后一项,将会是我们在上面定义的genericPoemMaker函数

function getUserInput(firstName, lastName, gender, callback) {

var fullName = firstName + " " + lastName;

if (typeof callback === "function") {

callback(fullName, gender);

}

}

function genericPoemMaker(name, gender) {

console.log(name + " is finer than fine wine.");

console.log("Altruistic and noble for the modern time.");

console.log("Always admirably adorned with the latest style.");

console.log("A " + gender + " of unfortunate tragedies who still manages a perpetual smile");

}

getUserInput("Michael", "Fassbender", "Man", genericPoemMaker); // 第一种方法:命名函数作为回调函数

getUserInput("Michael", "Fassbender", "Man", function(name, gender){ // 第二种方法:匿名函数作为回调函数

console.log(name + " is finer than fine wine.");

console.log("Altruistic and noble for the modern time.");

console.log("Always admirably adorned with the latest style.");

console.log("A " + gender + " of unfortunate tragedies who still manages a perpetual smile");

});

html回调函数,JS 回调函数相关推荐

  1. html倒计时函数,js倒计时函数封装

    在前端开发中,经常会做一些活动啊,有活动就经常会出现倒计时,这时候,我们就经常性的需要一个js倒计时功能. js倒计时功能,就需要用到js时间戳,我们需要获取当前时间的时间戳和结束时间的时间戳,进行相 ...

  2. ajax箭头函数,JS箭头函数

    一.定义 const aa = (参数列表) => {}x => x * x 相当于function (x) { return x * x; } 二.参数问题和返回值 当只有一个参数时,参 ...

  3. 【转】JS回调函数--简单易懂有实例

    JS回调函数--简单易懂有实例 初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function that is ...

  4. 17.Node.js 回调函数--异步编程

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程 ...

  5. js中函数的参数为函数的情况即回调函数

    js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数 function B() { console.log("函数B") setTimeou ...

  6. JS回调函数(callback)

    在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({url:"test.json",type: "GET", ...

  7. js回调函数的理解(轉)

    js回调函数(callback)理解Mark!讲之前说一句function say(){alert(,,,,,,,,)}var say=function (){alert(,,,,,,,)}var s ...

  8. html js 回调函数,js中回调函数的学习笔记

    回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你" ...

  9. node.js 回调函数

    Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数, ...

  10. js 回调函数 精析

    UpdateTime--2018年9月13日16点51分 1.什么是回调函数? 在JavaScript中,回调函数具体的定义为: 函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数 ...

最新文章

  1. DOT:视觉SLAM的动态目标物跟踪
  2. 牛客华为机试第5题python
  3. centos 安装git_在Centos8上安装Git的方法
  4. 有感于那个拣了两年馒头的女生~~
  5. 漂亮、免费和响应式HTML5网站模板 - 转
  6. Java库转oc_急急急!各位大神:一段JAVA代码转成OC代码。
  7. 除了敲代码,程序员还能有什么副业?
  8. 《计算机网络微课堂》一、计算机网络概述(你确定不点进来看看?)
  9. Java中this的用法
  10. 【秋招总结】分享我的社招java岗经验,以及我的大厂offer比较(京东网易滴滴,天津农行软开)
  11. ACCESS数据库程序设计
  12. MaxDOS V7 PXE网刻教程
  13. 中国足球深度剖析之五,破除周期性怪圈
  14. 【Html】 Html写静态淘宝页面
  15. 11个基于vue的UI框架
  16. 转自随风飘荡自由飞翔 SQL技巧:快速把握一些异常精妙的SQL语句
  17. 计算机boot快捷键,求各种电脑进入boot 的方式,一般的电脑快捷键是什么?
  18. 作为一名Java开发工程师需要掌握的专业技能
  19. java基础学习 day34(StringBuilder,链式编程)
  20. 从程序员之死看 IT 人士如何摆脱低情商诅咒——转载自CSDN官方博客

热门文章

  1. idea修改主题后,重新设置字体大小
  2. Triple Flips CodeForces - 1072E
  3. GPS 定位精度查看
  4. 戴尔笔记本耳机插上仍然有外音
  5. 二叉树求解前序序列、中序序列、后序序列
  6. 计算机数值数据编码(原码,反码,补码,移码)
  7. C语言鸡兔同笼应用题100道,C语言应用题。
  8. 【渝粤题库】广东开放大学物业管理基本制度与政策 形成性考核 (2)
  9. 【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码
  10. 栈和队列有什么区别、以及他们的共同点