javascript回调函数详解


Posted in Javascript onFebruary 06, 2018

在高级语言层出不穷的年代, 各个语言都号称有着一切皆为对象的自豪说法, 而 js 作为一门脚本语言却相对于java等传统面向对象语言有很大的不同之处, 除了 js 诡异的继承体系之外, 最令人着迷的一个特性就是回调函数, 当然也有很多人对他诟病, 笔者认为 回调函数 和 异步 是js语言特性的两大最为突出的店, 当然正如所有优点需要满足自我的需求, 这个世界没有银弹, 比如大量的使用回调函数将会使你的代码冗余, 错乱影响代码人的视觉与思维体验.

本文是自己对学习回调函数的的体会, 难免不完善甚至错误, 原谅我的无知, 我愿虚心学习, 完善自己.

javascript最独特的就是 函数 作为一等公民, 我更愿意将 js 称为一切皆为 变量 的一门高级语言, 函数也是一种变量可以成为其他函数的参数, 我们喜欢在js中称之为回调函数, 另外js中的匿名函数可以作为函数参数使得回调函数的写法如鱼得水.

ps. 回调函数与 c 语言中的函数指针类似---指针指针指针!!!重要的事情说三遍

先来看一下回调函数的定义

In computer programming, 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

回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。

回调函数

function addSqua(num1, num2, callback){
    var sum = num1 + num2;
    return callback(sum);
  }
  
  function squa(num){
    return num*num;
  }
  
  let num = addSqua(1, 2, squa);    
  console.log(num);
  //=>9

匿名回调函数

将匿名函数直接作为函数参数传递给函数, 这也是我们编程一般采用的

function addSqua(num1, num2, callback){
 var sum = num1 + num2;
 return callback(sum);
}
let num = addSqua(1, 2, function squa(num){
 return num*num;
});    
console.log(num); 
//=9

模仿数组中的every方法

在Array.prototype中添加类似与every一样的方法

Array.prototype.myEvery = function (callback) {
   if (typeof callback === 'function') {
    for (let i = 0; i < this.length; i++) {
     if (callback(this[i])) {
      return false;
     }   
    }
    return true;
   }
   return true;
  }
  
  let op = [3, 6, 'every', 9,'each'];
  op.myEvery(function (value) {
   console.log(value);
  })
  // 3
  // 6
  // 'every'
  // 9
  // 'each'

回调函数特点

  1. 不会立刻执行, 正如定义中给出的一样回调函数作为代码片段可以根据需要在其特定条件下执行, 回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。
  2. this,ES6推出了箭头函数, 箭头函数的推出需要在写回调函数的时候格外注意, this 是指向所在函数的上下文对象, 如果在在ES6采用箭头函数则需要注意 this使用, 箭头函数中this并没有上下文关系直说, 有兴趣的可以查看ES6 阮一峰, 再次奉上传送门

回调函数的优点和使用场景是个闭包

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

回调函数之美

  • DRY,避免重复代码。
  • 可以将通用的逻辑抽象。
  • 业务逻辑分离 (it's so beautiful ^-^ ^-^)
  • 提高代码可维护性和可读性。
  • 加强代码可读性。
  • 分离专职的函数。

js回调函数的伟大之处是其他传统语言所没有的, 它可以实现业务逻辑分离, 相当于暴露给外界一个接口, 这一点像极了前后端分离架构中的 API 接口设计理念

这个世界没有 '银弹' , 没有能够解决所有事情的一种方案, 由于js为异步而生, 回调函数用的最多的地方, 也是最适合的地方就是异步编程, 然而大量的使用会使得程序员的代码冗余, 有很大的不可读行, 体验极差, 索性让人高兴的事, 人们从来没有停止过对自己舒适度的追求。

以上就是本次小编整理的关于javascript回调函数的相关知识内容,感谢你对三水点靠木的支持。

Javascript 相关文章推荐
js资料prototype 属性
Mar 13 Javascript
5个javascript的数字格式化函数分享
Dec 07 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
Oct 27 Javascript
JavaScript调试之console.log调试的一个小技巧分享
Aug 07 Javascript
Vue.js获取被选择的option的value和text值方法
Aug 24 Javascript
微信小程序实现多个按钮的颜色状态转换
Feb 15 Javascript
javascript function(函数类型)使用与注意事项小结
Jun 10 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
Sep 05 Javascript
原生JS实现瀑布流插件
Feb 06 #Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 #Javascript
20行JS代码实现粘贴板复制功能
Feb 06 #Javascript
JS中offset和匀速动画详解
Feb 06 #Javascript
Bootstrap实现的表格合并单元格示例
Feb 06 #Javascript
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 #Javascript
AngularJS实时获取并显示密码的方法
Feb 06 #Javascript
You might like
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
python解析xml文件操作实例
2014/10/05 Python
python实现代码统计器
2019/09/19 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
python与mysql数据库交互的实现
2020/01/06 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Python 定义只读属性的实现方式
2020/03/05 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
python Xpath语法的使用
2020/11/26 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
外语专业毕业生个人的自荐信
2013/11/19 职场文书
网络研修随笔感言
2014/02/17 职场文书
群众路线党课主持词
2014/04/01 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
介绍信如何写
2015/01/31 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
施工安全保证书
2015/05/09 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
2016党员入党决心书
2015/09/22 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
pytorch实现ResNet结构的实例代码
2021/05/17 Python