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 相关文章推荐
自动检查并替换文本框内的字符
Jun 30 Javascript
JavaScript获取GridView选择的行内容
Apr 14 Javascript
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
一个关于jqGrid使用的小例子(行按钮)
Nov 04 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
Feb 22 Javascript
jQuery上传插件webupload使用方法
Aug 01 jQuery
vue组件之Alert的实现代码
Oct 17 Javascript
vue实现动态显示与隐藏底部导航的方法分析
Feb 11 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
三种php连接access数据库方法
2013/11/11 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
json原理分析及实例介绍
2012/11/29 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
Python类的专用方法实例分析
2015/01/09 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
高中生自我评价个人范文
2013/11/09 职场文书
电子商务专业推荐信范文
2013/12/02 职场文书
求职信的要素有哪些呢
2013/12/26 职场文书
大学生冰淇淋店商业计划书
2014/01/14 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis