钩子函数和回调函数的区别
1.钩子函数与回调函数都是事件处理函数
2.钩子函数是指windows的消息处理机制下,捕获消息的时候立即执行
3.回调函数并不能参与消息处理的过程,所以,它是在消息捕获结束后才执行的函数
钩子函数实例:
$('button').click(()=>{
console.log('我被点击了!')
})
回调函数实例:
1 2 3 | $( "p" ). on ( "click" , function(){ alert( $( this ).text() ); }) |
进一步理解
回调函数可以理解类中断处理函数,以指针的形式传入,在条件满足时自动执行。钩子函数是特殊的回调函数,如果有钩子函数时,钩子函数先得到控制权。
通过钩子函数,可以对消息事件进行拦截,满足条件,执行钩子含糊是,对消息进行想要的处理方式。这与运行时间长短没有关系,钩子函数可能不执行。
再进一步说钩子函数就是一种过滤机制,满足就执行(挂钩),不满足就不执行。
上边的理解是来源于导师的说法,我自己也私下做了测试,分别进行先后顺序的执行与钩子,回调并存嵌套执行做了处理,终于理解了上边话的意思,具体测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!DOCTYPE html> <html lang= "en" > <head> <meta charset= "UTF-8" > <title>Title</title> <script src= "node_modules/bootstrap/dist/js/jquery-3.2.1.min.js" ></script> <script > $(function () { console.time( "timer" ) /* $("button").click(() => { console.log("回调函数测试") })*/ console.timeEnd( "timer" ) console.time( "timer2" ) /* $("button").on("click", () => { console.log("钩子函数测试") })*/ document.getElementsByTagName( "button" )[0] .addEventListener( "click" , () => { alert( "我是回调函数" ) document.getElementsByTagName( "button" )[0] .onclick = () => { alert( "我是钩子函数" ) } }) console.timeEnd( "timer2" ) }) </script> </head> <body> <h1>对比一下</h1> <button>1222</button> </body> |
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,
在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。
这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
例子:
木马钩子其实也是一个dll文件,这个东东讲起来比较麻烦。
dll文件叫动态链接库文件,系统正常运行需要调用一些程序就是通过dll文件里的函数来执行的,一个正常运行的系统进程会调用许多的dll文件,而这些dll文件在系统用到某些功能时还会调用其它的dll文件。
木马钩子就是这样一种dll文件,通过其内置的函数,使系统进程认为这个dll文件是个正常的需要调用的dll,然后再通过这个dll来启动木马。
这就有点象使用钩子一样,先钩住挂靠再贴上去。
参考链接:https://blog.csdn.net/qq_37469957/article/details/81515566
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具