JS函数的防抖、节流、柯里化

一、函数防抖

函数防抖也是我们在一个网站中经常会用的到的方法。那么什么是函数防抖呢?其实很简单,就是我们在一段时间内频繁触发同一个事件,可能会十分的影响性能,所以,我们想要在一段时间内只触发一次。这就要用到防抖和节流。举个例子,防抖是频繁触发后,1s内没有再触发时才调用事件处理程序。

/** * 函数防抖 */ function debounce(callback, time) { var timer; //使用闭包,可以避免污染全局变量 return function () { clearTimeout(timer) //清除计时器 //重新开始计时 var args = arguments timer = setTimeout(() => { callback.apply(null, args) }, time); } } //测试案例 var handle = debounce(function (a, b) { console.log(a, b) }, 1000) window.onresize = function () { handle(1, 2) }

二、函数节流

那么和防抖相对应的就是节流了,节流就是在一段时间内只触发一次!

/** * 函数节流 */ function throttle(callback, time, immediately) { if (immediately) {//是否立即执行一次 var t; return function () { //之前没有计时 或 距离上次执行的时间已超过规定的值 if (!t || Date.now() - t >= time) { callback.apply(null, arguments) //得到的当前时间戳 t = Date.now() } } } else {//如果不立即执行一次,那么这个时间让他延迟多长时间后再执行 var timer; return function () { if (timer) return var args = arguments timer = setTimeout(() => { callback.apply(null, args) timer = null }, time); } } }

三、柯里化

柯里化是把一个多参函数,变为单参函数的一个方法,可以说是在JavaScript中最骚的操作之一了,毕竟在函数式编程中,单参函数的调用要比多参函数调用方便的多。

 
 

/** * 柯里化函数 * 在函数式编程中,柯里化最重要的作用是把多参函数变为单参函数 */ function curry(func) { //获取参数,把传过来的参数固定 var args = Array.from(arguments).slice(1) var that = this return function () { var curArgs = Array.from(arguments) var totalArgs = args.concat(curArgs) if (totalArgs.length >= func.length) { return func.apply(null, totalArgs) } else { totalArgs.unshift(func) return curry.apply(that, totalArgs) } } } function f(x, y, z) { return (x + y) * z; } var g = curry(f, 1) var x = g(2) console.log(x(3))

坚持梦想的脚步,即使真的没有绿洲出现,心也该坦然。依然放不下那些年少梦,但是也没用坚持的理由,或许真的要去一次墨脱了,为自己的坚持找一个真实的理由,然后才有足够的勇气继续走下去……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴天暖宝宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值