我理解的回调与同源方法执行漏洞(SOME)浅析

0x00 before

以前一直对回调有些迷糊,似懂非懂,虽然能明白用法和原理,但总有些小疑问,比如,为啥偏要用回调。今天集中看了很多博客,再配合上SOME的理解,感觉收获颇多,故给大家一起分享。

0x01 什么是JS的回调函数

见网上有人说:函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。

其实并不全对,函数a执行过程中执行了函数b,那也是回调。在我觉得回调的关键其实就是在正常处理的函数体中,去嵌套一个可变的灵活函数来辅助我们完成一些复杂的工作。

语言太乏力,代码见人心:

//这是一个正常函数
function people(weapon) {
   
   
    alert("我是一个兵!");
    weapon();
}
//准备回调的函数A
var A = function (){
   
   
    alert("我有一把手枪!");
}
//准备回调的函数B
var B = function (){
   
   
    alert("我有一挺机关枪!");
}

people(A)  //这是一个装备了手枪的士兵
people(B)  //这是一个装备了机关枪的士兵

上面就是一个最简单的回调。

以前我一直有个疑问,这不是多此一举吗,直接调用函数也可以办到啊!为什么要这么做呢?

其实回调的第一个好处就是:灵活! 你想想,如果你写死了代码,以后想为士兵换武器怎么办?在这里,将需要调用的函数当作参数传给一个”正常“的函数,我们就可以在不修改原功能代码的情况下,随意扩展!

仅仅是这样?那也只是按顺序执行了一个自定义的函数而已,感觉和回调这两个完全没有关系啊!

0x02 异步回调,方显真正威力

的确,上面的例子完全没有体现出回调的魅力,至少,回调中的”回”字,我们并没有一个直观的感受。

其实回调也分两种,同步回调和异步回调,刚刚的就是同步回调,函数按顺序执行,只不过是有一个自定义的函数功能,其它语言里指针和引用其实也可以做到类似的功能。

我觉得JS中的回调真正厉害的地方是异步的回调,它不仅让我们可以自定义处理的函数,还可以让我们决定什么时候触发这个函数,并且主进程不会因为这个函数而阻塞。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值