JS(函数防抖debounce)

JS(函数防抖debounce),第1张

答:不管触发多少次事件,都会等到事件触发 n 秒后 才会执行,如果在事件触发的 n 秒内 又触发了这个事件,那么就以新的事件的时间为准重新计算,总之,就是要等你触发事件 n 秒内 不再触发事件,我才会执行,一般用在用户表单输入实时搜索上

第一次看到柯里化这个词的时候,还是在看一篇算法相关的博客提到把函数柯里化,那时一看这个词就感觉很高端,实际上当你了解了后才发现其实就是高阶函数的一个特殊用法。

果然是不管作用怎么样都要有个高端的名字才有用。

看这个解释有一点抽象,我们就拿被做了无数次示例的add函数,来做一个简单的实现。

实际上就是把add函数的x,y两个参数变成了先用一个函数接收x然后返回一个函数去处理y参数。现在思路应该就比较清晰了,就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

但是问题来了费这么大劲封装一层,到底有什么用处呢?没有好处想让我们程序员多干事情是不可能滴,这辈子都不可能

上面的示例是一个正则的校验,正常来说直接调用check函数就可以了,但是如果我有很多地方都要校验是否有数字,其实就是需要将第一个参数reg进行复用,这样别的地方就能够直接调用hasNumber,hasLetter等函数,让参数能够复用,调用起来也更方便。

我们在做项目的过程中,封装一些dom *** 作可以说再常见不过,上面第一种写法也是比较常见,但是我们看看第二种写法,它相对一第一种写法就是自执行然后返回一个新的函数,这样其实就是提前确定了会走哪一个方法,避免每次都进行判断。

像我们js中经常使用的bind,实现的机制就是Currying

说了这几点好处之后,发现还有个问题,难道每次使用Currying都要对底层函数去做修改,

这边首先是初步封装,通过闭包把初步参数给保存下来,然后通过获取剩下的arguments进行拼接,最后执行需要currying的函数。

但是好像还有些什么缺陷,这样返回的话其实只能多扩展一个参数,currying(a)(b)(c)这样的话,貌似就不支持了(不支持多参数调用),一般这种情况都会想到使用递归再进行封装一层。

这边其实是在初步的基础上,加上了递归的调用,只要参数个数小于最初的fnlength,就会继续执行递归。

curry的一些性能问题你只要知道下面四点就差不多了:

其实在大部分应用中,主要的性能瓶颈是在 *** 作DOM节点上,这js的性能损耗基本是可以忽略不计的,所以curry是可以直接放心的使用。

没什么区别吧,都是隐式声明一个函数并调用。

优势知道一点,就是隐式函数里面的参数不会与其它框架的全局变量冲突。

比如,在隐式函数里面定义一个变量var a;

而你项目里面可能有其它地方会定义一个全局变量var a;

如果不用这中方式,那会干扰用到这个全局变量的代码

以上就是关于JS(函数防抖debounce)全部的内容,包括:JS(函数防抖debounce)、详解JS函数柯里化、js中的自调用函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9733442.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存