回调

jQuery中一直有使用回调函数,比如:$("#btn").click(function() {alert("button clicked");
});

example1:

       methods: {getClassDetail(toastTip) {this.$http.get('/StudyPlan/GetClassInfo?classId=' + classid + '&userId=' + userid + '&timezone=' + _self.timezone, {}).then(function (response) {//回调函数 toastTip存在才执行,相当于if( toastTip){ toastTip();}toastTip && toastTip();}).catch(function (error) {});},}this.getClassDetail(function () { Toast('已退出班级'); });

example2:

function add(num1, num2, callback){var sum = num1 + num2;callback(sum);
}function print(num){console.log(num);
}add(1, 2, print);      //=>3

example3:

匿名回调函数function add(num1, num2, callback){var sum = num1 + num2;callback(sum);
}add(1, 2, function(sum){console.log(sum);      //=>3
});

回调函数理解:

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

回调函数特点:

  • 不会立刻执行

回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。和普通的函数一样,回调函数在函调用函数数中也要通过()运算符调用才会执行。

  • 是个闭包

回调函数是一个闭包,也就是说它能访问到其外层定义的变量。

  • 执行前类型判断

在执行回调函数前最好确认其是一个函数。

function add(num1, num2, callback){var sum = num1 + num2;if(typeof callback === 'function'){//类型判断,确认是一个函数callback(sum);}
}

闭包(含义:就是能够读取其他函数内部变量的函数。)

  • 参考链接阮一峰讲闭包

  • 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

  • 使用场景:从外部读取局部变量

有时候需要得到函数内的局部变量。但是,正常情况下,这是办不到的,只有通过变通方法才能实现。
那就是在函数的内部,再定义一个函数。

 function f1(){var n=999;function f2(){alert(n); // 999}}

函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。

这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

 function f1(){var n=999;function f2(){//f2函数,就是闭包alert(n); }return f2;}var result=f1();result(); // 999
  • 闭包的用途:最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

理解javascript 回调函数,闭包相关推荐

  1. 理解javascript 回调函数

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

  2. 重新理解javascript回调函数

    把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于 ...

  3. 深入理解javascript原型和闭包(17)——补this

    本文对<深入理解javascript原型和闭包(10)--this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422. ...

  4. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  5. javascript 回调函数

    javascript 回调函数 回调函数 作为参数传递的函数 示例代码 let x = function () {console.log("执行回调函数") }let y = fu ...

  6. 深入理解javascript原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包. 首先,javascript本来就"不容易学".不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学java ...

  7. 深入理解javascript原型和闭包(2)——函数和对象的关系

    上文(理解javascript原型和作用域系列(1)--一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...

  8. javascript回调函数(模式)原理和示例深入分析

                                                                                     广大网友读懂了我之前论述的javasc ...

  9. 深入理解JavaScript系列:闭包(Closures)

    介绍 本章我们将介绍在JavaScript里大家经常来讨论的话题 -- 闭包(closure).闭包其实大家都已经谈烂了.尽管如此,这里还是要试着从理论角度来讨论下闭包,看看ECMAScript中的闭 ...

最新文章

  1. 【Spring实战4】04---装配Bean(自动装配)
  2. [js] 写一个获取页面中所有checkbox的方法
  3. 从你的全世界路过-论演员的自我修养
  4. 1.Android新版开发教程笔记—Android ADB工具使用
  5. linux将mysql中得配置为可读写_MySQL注入 利用系统读、写文件
  6. phpstrom常用配置
  7. 全球及中国无线硬盘行业发展前景与投资战略规划分析报告2022-2028年
  8. 华为2019年4月10日春招笔试题解
  9. win10安装Dreamweaver cc 2019报无法写入注册表的错误
  10. EXCEL MATCH函数
  11. 使用Python获取上市公司资讯,并进行判断利好利空消息(判断部分待更新)
  12. html 图片不能选中状态,css图片不让选中状态如何实现
  13. oraoledb.oracle.11,Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法...
  14. 【程序人生】这是 2017 关于程序员薪酬最详尽的调查报告
  15. taro 引用相对路径图片
  16. OCR-光学符号识别
  17. 负数在计算机中是怎么存储
  18. group_concat函数用法
  19. Android异常大全
  20. Typora使用方法

热门文章

  1. hive中json字符串(get_json_object与json_tuple)及url解析(parse_url)
  2. py金山打字通(滑稽版) /为了孙曌凌
  3. 怎么查税务的计算机代码,全国各国税局税务代码查询?
  4. 放大功能 - 安卓R
  5. tfcenter主动提供映射服务(需要密钥匹配使用)
  6. 在html中列表是块元素还是,HTML基础知识4-列表及表单的写法、块级元素和内联(行内)元素的区别...
  7. windows10桌面_如何有效整理windows桌面
  8. 大数据之路、阿里巴巴大数据实践读书笔记 --- 第十五章、数据质量
  9. 【鹅厂手游安全部门电话一面】
  10. n1装哪个版本的linux,Linux中安装使用Nylas N1邮件客户端