一般认为,钩子函数就是回调函数的一种,其实还是有差异的,差异地方就是:触发的时机不同。

先说钩子函数:

钩子(Hook)概念源于Windows的消息处理机制,通过设置钩子,应用程序对所有消息事件进行拦截,然后执行钩子函数。

let btn = document.getElementById("btn");

btn.onclick = () => {

console.log("i'm a hook");

}

上面的例子,在按钮点击时候立即执行钩子函数。而看下面的例子:

btn.addEventListener("click",() =>{

console.log(this.onclick);//undefined

});

给btn绑定了一个监听器,只有消息捕获完成之后才能触发回调函数。

很明显的差别就是:钩子函数在捕获消息的第一时间就执行,而回调函数是捕获结束时,最后一个被执行的。

回调函数其实是调用者将回调函数的指针传递给了调用函数,当调用函数执行完毕后,通过函数指针来调用回调函数。而钩子函数在消息刚发出,没到达目的窗口前就先捕获了该消息,先得到控制权执行钩子函数,所以他可以加工改变该消息,当然也可以不作为,还可以强行结束该消息。

其实钩子来源于英文词Hook,在windows系统中,一切皆消息,比如按了一下键盘,也是一个消息,Hook的意思是勾住,也就是在消息过去之前,可以先把消息勾住,不让其传递,你可以优先处理,也即这项技术就是提供了一个入口,能够针对不同的消息或者API在执行前,先执行你的操作,你的操作也称为「钩子函数」,所以,有的时候程序员在讨论的时候,也经常会说,可以先hook住,在处理,也即在执行某某操作之前,优先处理一下

好啦,这就是Hook的思想和原理

java中钩子函数回调函数_钩子函数和回调函数相关推荐

  1. java中的de是什么_【转】java中main函数解析

    源地址:http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html 从写java至今,写的最多的可能就是主函数 public st ...

  2. java中判断字符串是否为数字的方法 StringUtil包函数

    java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){   for (int i = 0; i &l ...

  3. python中函数的定义_Python函数是什么_如何定义和调用函数?

    函数是什么? 本节Python培训教程是要大家认识一个"老朋友"--函数. 与数学中的函数不同,在Python中,函数不是看上去冰冷无聊的规则和公式,而是实打实的.有自己作用的代码 ...

  4. java对三次函数求导_如何画三次函数图像

    问题 请绘制 的图形 思路一 借助软件 软件名称 介绍 geogebra image.png GeoGebra是自由且跨平台的动态数学软件,提供各级教育使用,包含了几何.代数.表格.图形.统计和微积分 ...

  5. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  6. java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式

    在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容.如果内容代码过多则写在同一个html文件就会显得特别乱,所以这 ...

  7. 如下哪个是Java中的合法自定义标识符_吉大13春《面向对象程序设计》在线作业答案...

    吉大13春<面向对象程序设计>在线作业答案 2013-03-21 01:03:14 259 有学员问关于吉大13春<面向对象程序设计>在线作业答案的题目的参考答案和解析,具体如 ...

  8. [转载] java中对数组进行排序_如何在Java中对数组排序

    参考链接: Java中main()的有效变体 java中对数组进行排序 Java Array is like a container that can hold a fixed number of t ...

  9. java中对数组进行排序_如何在Java中对数组排序

    java中对数组进行排序 Java Array is like a container that can hold a fixed number of the same type of items, ...

  10. java中对于框架的理解_接触Java项目一周后对一些基本框架的理解 | 学步园

    最近一周接触了一个Java EE的B/S项目,里面用到了SSH,部分持久层用的是ibatis,接触完后觉得有收获,于是把认识到的记录下来.同时欢迎高手拍砖. 现在终于知道所谓的三层框架(视图层,业务逻 ...

最新文章

  1. Socket编程与TCP
  2. 2018最具就业前景的7大编程语言,Java、Python和JavaScript?
  3. 80%以上Javaer可能不知道的一个Spring知识点
  4. 不扯淡学数据库实践联系理论-课程
  5. 智能机器人比巴和智伴哪个好_扫地机器人和吸尘器哪个好?
  6. 2.php函数,PHP常用函数总结(2)
  7. bootstrap文件不能被识别_如何使用npm安装bootstrap
  8. 禁止snmpd写入日志到syslog
  9. 计算机网络及电子邮件的原理,全国2006年4月全国自考计算机网络基本原理真题及答案..doc...
  10. Axure教程-新手入门基础(小白强烈推荐!!!)
  11. MyEclipse配置Tomcat7
  12. fences卸载_WIN10专业版彻底删除fences的技巧
  13. html绘制平滑等值面,前端基于Canvas生成等值面的方案
  14. java和c#通过esb服务互调用组件
  15. 1.1 计算机语言发展史以及未来方向
  16. P02014158 马帅(信息论课程作业)
  17. SurfaceView打造自定义时钟ClockView
  18. 使用windows远程桌面连接复制拷贝远程电脑上文件到本地的方法
  19. redis生成自增流水号每天自动从头开始
  20. 我的电磁学讲义10:磁感应强度 毕奥-萨伐尔定律

热门文章

  1. OSChina 周日乱弹 ——还是有个程序员女朋友好!
  2. 混合波束成形| 宽带系统基于码本的信道估计 《Channel Estimation for Hybrid Architecture-Based Wideband Millimete
  3. 与另一台计算机建立ipc,利用IPC$开启他人电脑远程桌面
  4. 简易入手《SOM神经网络》的本质与原理
  5. ginapi服务器性能,基于gin web框架搭建RESTful API服务
  6. 32631、32649分别代表什么坐标系?
  7. 精灵鼠从入口到出口的最少减少速度
  8. 男性:曹云金再恋嫩模:男人最重要的是有趣
  9. CSS进阶之关于网格布局(Grid) 你了解哪些
  10. 麦肯锡深度解析:量子计算将拯救地球?